Dieser Code prüft zuerst, ob das Verzeichnis vorhanden ist, erstellt es, falls nicht, und erstellt anschließend die Datei. Bitte beachten Sie, dass ich einige Ihrer Methodenaufrufe nicht überprüfen konnte, da ich nicht über Ihren vollständigen Code verfüge. Daher gehe ich davon aus, dass die Aufrufe von Dingen wie getTimeStamp()
und getClassName()
funktionieren werden. Sie sollten auch etwas mit dem Möglichen tun, das IOException
bei Verwendung einer der java.io.*
Klassen ausgelöst werden kann - entweder sollte Ihre Funktion, die die Dateien schreibt, diese Ausnahme auslösen (und sie wird an anderer Stelle behandelt), oder Sie sollten dies direkt in der Methode tun. Außerdem habe ich angenommen, dass dies id
vom Typ ist String
- ich weiß es nicht, da Ihr Code es nicht explizit definiert. Wenn es etwas anderes wie ein ist int
, sollten Sie es wahrscheinlich in ein String
umwandeln, bevor Sie es im Dateinamen verwenden, wie ich es hier getan habe.
Außerdem habe ich Ihre append
Anrufe durch concat
oder +
nach meinem Ermessen ersetzt.
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);
}
}
Sie sollten wahrscheinlich keine bloßen Pfadnamen wie diesen verwenden, wenn Sie den Code unter Microsoft Windows ausführen möchten - ich bin nicht sicher, was er mit /
den Dateinamen tun wird . Für eine vollständige Portabilität sollten Sie wahrscheinlich File.separator verwenden , um Ihre Pfade zu erstellen .
Bearbeiten : Laut einem Kommentar von JosefScript unten ist es nicht notwendig, die Existenz eines Verzeichnisses zu testen. Der directory.mkdir()
Aufruf wird zurückgegeben, true
wenn ein Verzeichnis erstellt wurde, und false
wenn dies nicht der Fall ist, einschließlich des Falls, in dem das Verzeichnis bereits vorhanden war.
mkdirs()
Methode verwenden.Java 8+ Version
Die Files.createDirectories
Erstellt ein neues Verzeichnis und übergeordnete Verzeichnisse, die nicht vorhanden sind.
Die Methode löst keine Ausnahme aus, wenn das Verzeichnis bereits vorhanden ist.
quelle
Der Versuch, dies so kurz und einfach wie möglich zu gestalten. Erstellt ein Verzeichnis, falls es nicht vorhanden ist, und gibt dann die gewünschte Datei zurück:
quelle
Ich würde Folgendes für Java8 + vorschlagen.
quelle
Files.createFile(Files.createDirectories(path)).toFile()
sollteFiles.createDirectories(path).toFile()
fürAccess Denied
Grund.Files.createFile(Files.createDirectories(path))
funktioniert nicht wie im obigen Kommentar beschrieben.createDirectories
erstellt bereits ein Verzeichnis mit dem Dateinamen, zB "test.txt", schlägt dahercreateFile
fehl.Code:
quelle
Die Verwendung
java.nio.Path
wäre ganz einfach -quelle
Wenn Sie eine webbasierte Anwendung erstellen, besteht die bessere Lösung darin, zu überprüfen, ob das Verzeichnis vorhanden ist oder nicht, und die Datei zu erstellen, wenn sie nicht vorhanden ist. Wenn vorhanden, neu erstellen.
quelle