Ce code vérifie d'abord l'existence du répertoire et le crée dans le cas contraire, puis crée le fichier par la suite. Veuillez noter que je n'ai pas pu vérifier certains de vos appels de méthode car je n'ai pas votre code complet, donc je suppose que les appels à des choses comme getTimeStamp()
et getClassName()
fonctionneront. Vous devez également faire quelque chose avec le possible IOException
qui peut être levé lors de l'utilisation de l'une des java.io.*
classes - soit votre fonction qui écrit les fichiers doit lever cette exception (et elle doit être gérée ailleurs), soit vous devez le faire directement dans la méthode. De plus, j'ai supposé que c'était id
de type String
- je ne sais pas car votre code ne le définit pas explicitement. Si c'est autre chose comme an int
, vous devriez probablement le convertir en a String
avant de l'utiliser dans le fileName comme je l'ai fait ici.
De plus, j'ai remplacé vos append
appels par concat
ou +
comme je l'ai jugé approprié.
public void writeFile(String value){
String PATH = "/remote/dir/server/";
String directoryName = PATH.concat(this.getClassName());
String fileName = id + getTimeStamp() + ".txt";
File directory = new File(directoryName);
if (! directory.exists()){
directory.mkdir();
// If you require it to make the entire directory path including parents,
// use directory.mkdirs(); here instead.
}
File file = new File(directoryName + "/" + fileName);
try{
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();
}
catch (IOException e){
e.printStackTrace();
System.exit(-1);
}
}
Vous ne devriez probablement pas utiliser de noms de chemins nus comme celui-ci si vous souhaitez exécuter le code sur Microsoft Windows - je ne suis pas sûr de ce qu'il fera avec /
les noms de fichiers. Pour une portabilité totale, vous devriez probablement utiliser quelque chose comme File.separator pour construire vos chemins.
Edit : Selon un commentaire de JosefScript ci-dessous, il n'est pas nécessaire de tester l'existence d'un répertoire. L' directory.mkdir()
appel sera renvoyé true
s'il a créé un répertoire, et false
s'il ne l'a pas fait, y compris le cas où le répertoire existait déjà.
mkdirs()
méthode.version java 8+
Les Files.createDirectories
crée un nouveau répertoire et des répertoires parents qui n'existent pas.
La méthode ne lève pas d'exception si le répertoire existe déjà.
la source
Essayer de rendre cela aussi court et simple que possible. Crée un répertoire s'il n'existe pas, puis renvoie le fichier souhaité:
la source
Je suggérerais ce qui suit pour Java8 +.
la source
Files.createFile(Files.createDirectories(path)).toFile()
devrait êtreFiles.createDirectories(path).toFile()
pourAccess Denied
raison.Files.createFile(Files.createDirectories(path))
ne fonctionne pas comme décrit dans le commentaire ci-dessus.createDirectories
crée déjà un répertoire avec le nom de fichier, par exemple "test.txt", donccreateFile
échouera.code:
la source
L'utiliser
java.nio.Path
serait assez simple -la source
Si vous créez une application Web, la meilleure solution est de vérifier que le répertoire existe ou non, puis de créer le fichier s'il n'existe pas. S'il existe, recréez à nouveau.
la source