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.

29
demandé sur Дмитрий Иванович Менделеев 2012-05-03 08:11:02

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
17
répondu COD3BOY 2012-05-03 04:24:10

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

36
répondu Niranjan 2014-07-01 08:22:55

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);
    }
}
6
répondu Thomas Vos 2015-08-22 11:43:55

/**
 * 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);
    }
}
4
répondu taran mahal 2014-06-01 09:07:00

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..");
2
répondu Xar E Ahmer 2014-05-15 06:25:20

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();
}
1
répondu Krishnakant Dalal 2012-05-03 04:13:01

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();
}
1
répondu Changwei Yao 2012-05-03 04:15:54

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;
}
1
répondu Jon 2017-12-31 03:02:11
    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);
    }

}
0
répondu twenk11k 2018-06-04 18:00:27