Czy istnieje sposób użycia FileOutputStream w taki sposób, że jeśli plik (nazwa pliku String) nie istnieje, to go utworzy?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
java
file
file-io
new-operator
fileoutputstream
Stefan Dunn
źródło
źródło
createNewFile()
metodą, jak pokazano w moim przykładzie.createNewFile()
sama atomowo sprawdza istnienie pliku.createNewFile()
to całkowita strata czasu tutaj. System już to zrobi. Po prostu zmuszasz go, by wyglądał dwa razy.Przed utworzeniem pliku konieczne jest utworzenie wszystkich katalogów rodzica.
Posługiwać się
yourFile.getParentFile().mkdirs()
źródło
Możesz utworzyć pusty plik, czy istnieje, czy nie ...
jeśli chcesz zostawić plik, jeśli istnieje ...
FileNotFoundException otrzymasz tylko wtedy, gdy spróbujesz utworzyć plik w katalogu, który nie istnieje.
źródło
FileNotFoundException
w obu przypadkach.Przekaż to
f
swojemuFileOutputStream
konstruktorowi.źródło
FileUtils z apache commons jest całkiem dobrym sposobem na osiągnięcie tego w jednym wierszu.
Spowoduje to utworzenie folderów nadrzędnych, jeśli nie istnieją, i utworzenie pliku, jeśli nie istnieje, i wygenerowanie wyjątku, jeśli obiekt pliku jest katalogiem lub nie można go zapisać. Jest to równoważne z :
Wszystkie powyższe operacje spowodują wyjątek, jeśli bieżący użytkownik nie będzie mógł wykonać operacji.
źródło
Utwórz plik, jeśli nie istnieje. Jeśli plik zostanie zamknięty, wyczyść jego zawartość:
źródło
Po prostu dając alternatywny sposób utworzenia pliku tylko wtedy, gdy nie istnieje przy użyciu ścieżki i plików.
źródło
Możesz potencjalnie uzyskać,
FileNotFoundException
jeśli plik nie istnieje.Dokumentacja Java mówi:
Jeśli używasz Java 7, możesz użyć pakietu java.nio:
źródło
new FileOutputStream(f)
utworzy plik w większości przypadków, ale niestety otrzymasz wyjątek FileNotFoundExceptionz Javadoc
Innymi słowy, może istnieć wiele przypadków, w których można uzyskać wyjątek FileNotFoundException oznaczający „Nie można utworzyć pliku”, ale nie można znaleźć przyczyny niepowodzenia tworzenia pliku.
Rozwiązaniem jest usunięcie dowolnego wywołania interfejsu API plików i użycie zamiast tego interfejsu API plików, ponieważ zapewnia on znacznie lepszą obsługę błędów. Zazwyczaj zastąpić dowolny
new FileOutputStream(f)
zFiles.newOutputStream(p)
.W przypadkach, w których musisz użyć interfejsu API plików (ponieważ korzystasz z zewnętrznego interfejsu za pomocą na przykład pliku), użycie
Files.createFile(p)
jest dobrym sposobem na upewnienie się, że plik został poprawnie utworzony, a jeśli nie, to wiesz, dlaczego nie działa. Niektóre osoby skomentowały powyżej, że jest to zbędne. To prawda, ale masz lepszą obsługę błędów, która może być konieczna w niektórych przypadkach.źródło