2017-05-05 5 views
1

Je dois renommer un fichier .afp avec le nom du fichier .txt. J'ai trébuché sur de nombreuses «solutions» tout en essayant de faire fonctionner cette chose et rien n'a aidé.Renommer un fichier avec une chaîne à partir d'un fichier d'extension différente

Disons que j'ai un fichier txt dans C:/test/a/Mytes t.txt et je veux renommer le fichier .afp qui est dans C:/files/b/Testf ile.afp. C'est ce que j'essaie de faire (selon les solutions trouvées sur ce site) et ça ne marche pas. Je coupe l'extension du fichier .txt et obtenir seulement le nom du fichier:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 

afpSRC contient le chemin vers le dossier dans lequel le fichier est situé .afp et afpName est le nom du fichier.

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas et .afp le nom du fichier reste le même? Probablement parce que File file = new File(afpSRC, afpName); ne fait référence à aucun fichier existant.

+0

Ce qui est dans 'filename'? Il doit être seulement le nom du fichier pas le chemin complet pour que cela fonctionne. – jingx

+0

J'ai ajouté un commentaire après, vous n'avez probablement pas vu, désolé. fileName est uniquement txt fileName. pas le chemin absolu –

Répondre

0


Je suppose que afpSRC n'est pas le chemin parent ou afpName n'est pas le nom de fichier. Ou les deux ?

Pour déboguer, vérifiez que le fichier existe en premier.
Si ce n'est pas le cas, lancez une exception.
En plus de toute façon (code de débogage et code final), vous devez vérifier la valeur retournée par renameTo() et le gérer en conséquence.

Voici un exemple de code:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
if (!file.exists()){ 
    throw new RuntimeException("file not found = " + file); 
} 

boolean isRenamed = file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 
System.out.println("isRenamed = " + isRenamed); 
if (!isRenamed){ 
    // handle the problem 
} 
+0

Merci beaucoup, j'ai réalisé que j'ai copié la version .pdf du fichier et pas .afp dans le dossier dst et que l'erreur de lancement, je l'ai eu seulement après avoir essayé de vérifier si le fichier existe. Perdu 2 heures à cause de cette erreur stupide .. –

+0

Vous êtes les bienvenus :) erreurs bêtes sont souvent sous évalués :) – davidxxx

1

Si vous utilisez les installations Java NIO, vous serez en mesure d'obtenir des informations par une exception en expliquant pourquoi le changement de nom a échoué.

Files.move(Path from, Path to, CopyOption... options) throws IOException

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
Path afpPathName = Paths.get(afpSRC, afpName); 
Path newPathName = Paths.get(afpSRC, fileNameNoExt + ".afp"); 
Files.move(afpPathName, newPathName); 
+0

Paths.get place un séparateur de répertoire entre chacun de ses arguments. La troisième ligne de code devrait être 'Paths.get (afpSRC, fileNameNoExt +" .afp ")' ... sauf si vous vouliez réellement créer un fichier dont le nom de base est juste ".afp". – VGR

+0

@VGR oups! bonne prise. Fixé. –