Jak sprawdzić, czy plik istnieje w Javie?
Jak mogę sprawdzić, czy plik istnieje, przed otwarciem go do odczytu w Java (odpowiednik Perla
-e $filename
)?
Jedyne podobne pytanie na SO dotyczy zapisu pliku i w ten sposób zostało udzielone FileWriter
, co oczywiście nie ma tu zastosowania.
Jeśli to możliwe wolałbym prawdziwe API wywołanie zwracające true/false w przeciwieństwie do jakiegoś " wywołania API, aby otworzyć plik i złapać, gdy rzuca wyjątek które sprawdzasz "Brak pliku " w tekście", ale z tym drugim mogę żyć.
17 answers
Za pomocą java.io.File
:
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) {
// do something
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-07 12:40:28
Zalecałbym użycie isFile()
zamiast exists()
. Przez większość czasu sprawdzasz, czy ścieżka wskazuje na plik nie tylko na to, że istnieje. Pamiętaj, że exists()
zwróci true, jeśli ścieżka wskazuje na katalog.
new File("path/to/file.txt").isFile();
new File("C:/").exists()
zwróci true, ale nie pozwoli Ci otworzyć i odczytać z niego pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-11 06:41:57
Używając nio w Javie SE 7,
import java.nio.file.*;
Path path = Paths.get(filePathString);
if (Files.exists(path)) {
// file exist
}
if (Files.notExists(path)) {
// file is not exist
}
Jeśli zarówno exists
jak i notExists
zwrócą false, istnienie pliku nie może być zweryfikowane. (być może brak prawa dostępu do tej ścieżki)
Możesz sprawdzić czy path
jest katalogiem czy zwykłym plikiem.
if (Files.isDirectory(path)) {
// path is directory
}
if (Files.isRegularFile(path)) {
// path is regular file
}
Proszę sprawdzić ten Java SE 7 tutorial.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-09 16:58:00
Używanie Javy 8:
if(Files.exists(Paths.get(filePathString))) {
// do something
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-01 13:33:32
File f = new File(filePathString);
To nie utworzy fizycznego pliku. Po prostu utworzy obiekt z pliku klasy. Aby fizycznie utworzyć plik, musisz go jawnie utworzyć:
f.createNewFile();
Więc f.exists()
może być użyty do sprawdzenia, czy taki plik istnieje, czy nie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 11:06:21
f.isFile() && f.canRead()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 15:03:09
Istnieje wiele sposobów, aby to osiągnąć.
-
W przypadku sprawiedliwego istnienia. Może to być plik lub katalog.
new File("/path/to/file").exists();
-
Sprawdź plik
File f = new File("/path/to/file"); if(f.exists() && f.isFile()) {}
-
Sprawdź Katalog.
File f = new File("/path/to/file"); if(f.exists() && f.isDirectory()) {}
-
Java 7 way.
Path path = Paths.get("/path/to/file"); Files.exists(path) // Existence Files.isDirectory(path) // is Directory Files.isRegularFile(path) // Regular file Files.isSymbolicLink(path) // Symbolic Link
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 15:50:24
Możesz użyć: File.exists()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-01 11:16:33
Pierwsze trafienie dla "Plik java istnieje" w google:
import java.io.*;
public class FileTest {
public static void main(String args[]) {
File f = new File(args[0]);
System.out.println(f + (f.exists()? " is found " : " is missing "));
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 11:35:32
Nie. po prostu złap FileNotFoundException.
system plików musi sprawdzić, czy plik i tak istnieje. Nie ma sensu robić tego wszystkiego dwa razy i kilka powodów, aby tego nie robić, takich jak:
- podwojenie kodu
- problem z oknem czasowym, przez który plik może istnieć podczas testowania, ale nie po otwarciu, lub odwrotnie, i
- fakt, że jak pokazuje istnienie tego pytania, możesz zrobić zły test i uzyskać złą odpowiedź.
Nie próbuj zastanów się nad systemem. To wie. I nie próbuj przewidywać przyszłości. Ogólnie rzecz biorąc, najlepszym sposobem sprawdzenia, czy dowolny zasób jest po prostu spróbować go użyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-03 09:39:12
Dla mnie połączenie zaakceptowanej odpowiedzi Seana A. O. Harneya i uzyskanego komentarza Cort3z wydaje się najlepszym rozwiązaniem.
Użyto następującego fragmentu:
File f = new File(filePathString);
if(f.exists() && f.isFile()) {
//do something ...
}
Mam nadzieję, że to komuś pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 11:02:14
Wiem, że trochę się spóźniłem w tym wątku. Jednak oto moja odpowiedź, ważna od Javy 7 i nowszych.
Następujący fragment
if(Files.isRegularFile(Paths.get(pathToFile))) {
// do something
}
Jest idealnie satifactory, ponieważ metoda isRegularFile
zwraca false
Jeśli plik nie istnieje. Dlatego nie ma potrzeby sprawdzania, czy Files.exists(...)
.
Zauważ, że inne parametry są opcjami wskazującymi, jak linki powinny być obsługiwane. Domyślnie stosowane są dowiązania symboliczne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 09:39:21
Warto też zapoznać się z Commons FileUtils https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html Ma to dodatkowe metody zarządzania plikami i często lepsze niż JDK.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-10 23:05:57
Prosty przykład z dobrymi praktykami kodowania i obejmujący wszystkie przypadki:
private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
if (f.exists()) {
throw new FileAlreadyExistsException(f.getAbsolutePath());
} else {
try {
URL u = new URL(url);
FileUtils.copyURLToFile(u, f);
} catch (MalformedURLException ex) {
Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Odniesienie i więcej przykładów na
Https://zgrepcode.com/examples/java/java/nio/file/filealreadyexistsexception-implementations
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-04 09:16:26
Nie używaj konstruktora plików z łańcuchem znaków.
To może się nie udać!
Zamiast tego użyj URI:
File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) {
// to do
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 08:21:43
You can make it this way
import java.nio.file.Paths;
String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
//...do somethinh
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-17 13:57:06
Istnieje szczególny cel projektowania tych metod. Nie możemy powiedzieć, że użyj kogokolwiek, aby sprawdzić, czy plik istnieje, czy nie.
- isFile () : sprawdza, czy plik oznaczony tą abstrakcyjną nazwą ścieżki jest plikiem normalnym.
- exists () : sprawdza, czy istnieje plik lub katalog oznaczony tą abstrakcyjną nazwą ścieżki. docs.oracle.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-03 12:18:57