android, Comment renommer un fichier?
Dans mon application, j'ai besoin d'enregistrer de la vidéo. Avant de commencer l'enregistrement, je lui attribue un nom et un répertoire. Une fois l'enregistrement terminé l'utilisateur a la possibilité de renommer son fichier. J'ai écrit le code suivant mais il semble que cela ne fonctionne pas.
Lorsque l'utilisateur entre le nom du fichier et clique sur le bouton, je vais faire ceci:
private void setFileName(String text) {
String currentFileName = videoURI.substring(videoURI.lastIndexOf("/"), videoURI.length());
currentFileName = currentFileName.substring(1);
Log.i("Current file name", currentFileName);
File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), MEDIA_NAME);
File from = new File(directory, "currentFileName");
File to = new File(directory, text.trim() + ".mp4");
from.renameTo(to);
Log.i("Directory is", directory.toString());
Log.i("Default path is", videoURI.toString());
Log.i("From path is", from.toString());
Log.i("To path is", to.toString());
}
Texte: est le nom qui est entré par l'utilisateur. Nom de fichier actuel: est le nom qui est attribué par moi avant l'enregistrement MEDIA_NAME: nom du dossier
Logcat affiche ce:
05-03 11:56:37.295: I/Current file name(12866): Mania-Karaoke_20120503_115528.mp4
05-03 11:56:37.295: I/Directory is(12866): /mnt/sdcard/Movies/Mania-Karaoke
05-03 11:56:37.295: I/Default path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/Mania-Karaoke_20120503_115528.mp4
05-03 11:56:37.295: I/From path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/currentFileName
05-03 11:56:37.295: I/To path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/hesam.mp4
Toute suggestion serait appréciée.
9 réponses
Le problème est dans cette ligne,
File from = new File(directory, "currentFileName");
Ici currentFileName
est une Chaîne que vous n'avez pas à utiliser "
Essayez de cette façon,
File from = new File(directory, currentFileName );
^ ^ //You dont need quotes
Dans votre code:
Ne devrait-il pas être:
File from = new File(directory, currentFileName);
Au Lieu de
File from = new File(directory, "currentFileName");
Pour la sécurité,
Utilisez le fichier.renameTo (). Mais vérifiez l'existence du répertoire avant de le renommer!
File dir = Environment.getExternalStorageDirectory();
if(dir.exists()){
File from = new File(dir,"from.mp4");
File to = new File(dir,"to.mp4");
if(from.exists())
from.renameTo(to);
}
Se référer: http://developer.android.com/reference/java/io/File.html#renameTo%28java.io.File%29
Utilisez cette méthode pour renommer un fichier. Le fichier from
sera renommé to
.
private boolean rename(File from, File to) {
return from.getParentFile().exists() && from.exists() && from.renameTo(to);
}
Exemple de code:
public class MainActivity extends Activity {
private static final String TAG = "YOUR_TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File currentFile = new File("/sdcard/currentFile.txt");
File newFile new File("/sdcard/newFile.txt");
if(rename(currentFile, newFile)){
//Success
Log.i(TAG, "Success");
} else {
//Fail
Log.i(TAG, "Fail");
}
}
private boolean rename(File from, File to) {
return from.getParentFile().exists() && from.exists() && from.renameTo(to);
}
}
/**
* ReName any file
* @param oldName
* @param newName
*/
public static void renameFile(String oldName,String newName){
File dir = Environment.getExternalStorageDirectory();
if(dir.exists()){
File from = new File(dir,oldName);
File to = new File(dir,newName);
if(from.exists())
from.renameTo(to);
}
}
Exemple de travail...
File oldFile = new File("your old file name");
File latestname = new File("your new file name");
boolean success = oldFile .renameTo(latestname );
if(success)
System.out.println("file is renamed..");
Fournir un objet de fichier cible avec un nom de fichier différent.
// Copy the source file to target file.
// In case the dst file does not exist, it is created
void copy(File source, File target) throws IOException {
InputStream in = new FileInputStream(source);
OutputStream out = new FileOutputStream(target);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
Vous devriez vérifier si le répertoire existe!
File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), MEDIA_NAME);
if(!directory.exist()){
directory.mkdirs();
}
C'est ce que j'ai fini par utiliser. Il gère le cas où il y a un fichier existant avec le même nom en ajoutant un entier au nom du fichier.
@NonNull
private static File renameFile(@NonNull File from,
@NonNull String toPrefix,
@NonNull String toSuffix) {
File directory = from.getParentFile();
if (!directory.exists()) {
if (directory.mkdir()) {
Log.v(LOG_TAG, "Created directory " + directory.getAbsolutePath());
}
}
File newFile = new File(directory, toPrefix + toSuffix);
for (int i = 1; newFile.exists() && i < Integer.MAX_VALUE; i++) {
newFile = new File(directory, toPrefix + '(' + i + ')' + toSuffix);
}
if (!from.renameTo(newFile)) {
Log.w(LOG_TAG, "Couldn't rename file to " + newFile.getAbsolutePath());
return from;
}
return newFile;
}
public void renameFile(File file,String suffix) {
String ext = FilenameUtils.getExtension(file.getAbsolutePath());
File dir = file.getParentFile();
if(dir.exists()){
File from = new File(dir,file.getName());
String name = file.getName();
int pos = name.lastIndexOf(".");
if (pos > 0) {
name = name.substring(0, pos);
}
File to = new File(dir,name+suffix+"."+ext);
if(from.exists())
from.renameTo(to);
}
}