C'è un modo per utilizzare FileOutputStream in modo tale che se un file (String filename) non esiste, lo creerà?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
C'è un modo per utilizzare FileOutputStream in modo tale che se un file (String filename) non esiste, lo creerà?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Risposte:
Lancerà a FileNotFoundExceptionse il file non esiste e non può essere creato ( doc ), ma lo creerà se possibile. Per essere sicuri, probabilmente dovresti prima verificare che il file esista prima di creare il FileOutputStream(e creare con createNewFile()se non lo fa):
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
createNewFile()metodo, come mostrato nel mio esempio.
createNewFile()è una totale perdita di tempo qui. Il sistema lo farà già. Lo stai solo forzando a sembrare due volte.
Prima di creare un file, è necessario creare tutte le directory dei genitori.
Uso yourFile.getParentFile().mkdirs()
Puoi creare un file vuoto, che esista o no ...
new FileOutputStream("score.txt", false).close();
se vuoi lasciare il file se esiste ...
new FileOutputStream("score.txt", true).close();
Otterrai un FileNotFoundException solo se provi a creare il file in una directory che non esiste.
FileNotFoundExceptionin entrambi i casi.
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
Passalo fal tuo FileOutputStreamcostruttore.
FileUtils di Apache Commons è un ottimo modo per raggiungere questo obiettivo in una sola riga.
FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))
Ciò creerà le cartelle padre se non esistono e creerà un file se non esiste e genererà un'eccezione se l'oggetto file è una directory o non può essere scritto. Ciò equivale a :
File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);
Tutte le operazioni di cui sopra genereranno un'eccezione se l'utente corrente non è autorizzato a eseguire l'operazione.
Crea file se non esiste. Se il file esce, cancella il suo contenuto:
/**
* Create file if not exist.
*
* @param path For example: "D:\foo.xml"
*/
public static void createFile(String path) {
try {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
} else {
FileOutputStream writer = new FileOutputStream(path);
writer.write(("").getBytes());
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Basta dare un modo alternativo per creare il file solo se non esiste usando Path and Files.
Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
Files.createFile(path);
Files.write(path, ("").getBytes());
È possibile ottenere potenzialmente un FileNotFoundExceptionse il file non esiste.
La documentazione Java dice:
La disponibilità o la creazione di un file dipende dalla piattaforma sottostante http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
Se stai usando Java 7 puoi usare il pacchetto java.nio:
Il parametro options specifica come viene creato o aperto il file ... apre il file per la scrittura, creando il file se non esiste ...
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
new FileOutputStream(f) creerà un file nella maggior parte dei casi, ma sfortunatamente otterrai FileNotFoundException
se il file esiste ma è una directory anziché un file normale, non esiste ma non può essere creato o non può essere aperto per altri motivi
In altre parole, ci potrebbero essere molti casi in cui si otterrebbe FileNotFoundException che significa "Impossibile creare il file", ma non si è in grado di trovare il motivo per cui la creazione del file non è riuscita.
Una soluzione è rimuovere qualsiasi chiamata all'API File e utilizzare invece l'API File poiché fornisce una gestione degli errori molto migliore. Sostituire in genere qualsiasi new FileOutputStream(f)con Files.newOutputStream(p).
Nei casi in cui è necessario utilizzare l'API File (perché ad esempio si utilizza un'interfaccia esterna utilizzando File), l'utilizzo Files.createFile(p)è un buon modo per assicurarsi che il file sia stato creato correttamente e in caso contrario si saprebbe perché non ha funzionato. Alcune persone hanno commentato sopra che questo è ridondante. È vero, ma ottieni una migliore gestione degli errori che potrebbe essere necessaria in alcuni casi.