it-swarm.com.de

Wie überprüfe ich, ob eine Datei in Java vorhanden ist?

Wie kann ich prüfen, ob eine Datei vorhanden ist, bevor Sie sie zum Lesen in Java öffnen? (äquivalent zu Perls -e $filename). 

Die einzige ähnliche Frage zu SO befasst sich mit dem Schreiben der Datei und wurde daher mit FileWriter beantwortet, was hier offensichtlich nicht anwendbar ist.

Wenn möglich würde ich es vorziehen, dass ein echter API-Aufruf true/false zurückgibt, im Gegensatz zu einigen "Aufruf-APIs, um eine Datei zu öffnen und abzufangen, wenn eine Ausnahme ausgelöst wird, die Sie im Text nach" no file "prüfen, aber ich kann mit der letztere.

739
DVK

Verwendung von Java.io.File :

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}
1237

Ich würde empfehlen, isFile() anstelle von exists() zu verwenden. Meistens prüfen Sie, ob der Pfad auf eine Datei verweist, und nicht nur, dass sie existiert. Denken Sie daran, dass exists() true zurückgibt, wenn Ihr Pfad auf ein Verzeichnis verweist.

new File("path/to/file.txt").isFile();

new File("C:/").exists() gibt true zurück, erlaubt aber nicht das Öffnen und Lesen als Datei.

398
Chris Dail

Durch die Verwendung von nio in Java 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
}

Wenn sowohl Exists als auch NotExists falsch sind, kann das Vorhandensein der Datei nicht überprüft werden. (vielleicht kein Zugriffsrecht auf diesen Pfad)

Sie können überprüfen, ob der Pfad ein Verzeichnis oder eine reguläre Datei ist.

if (Files.isDirectory(path)) {
  // path is directory
}

if (Files.isRegularFile(path)) {
  // path is regular file
}

Bitte überprüfen Sie dieses Java SE 7-Tutorial .

129
Wonil

Verwendung von Java 8:

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}
39
Wendel
File f = new File(filePathString); 

Dadurch wird keine physische Datei erstellt. Erzeugt nur ein Objekt der Klasse File. Um eine Datei physisch zu erstellen, müssen Sie sie explizit erstellen:

f.createNewFile();

Mit f.exists() kann also geprüft werden, ob eine solche Datei existiert oder nicht.

27
rizwan
f.isFile() && f.canRead()
24
jhumble

Sie können Folgendes verwenden: File.exists()

14
Francis Upton

erster Treffer für "Java-Datei existiert" bei 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 "));
    }
}
14
just somebody

Dafür gibt es mehrere Möglichkeiten. 

  1. Im Falle von nur für die Existenz. Es kann sich um eine Datei oder ein Verzeichnis handeln. 

    new File("/path/to/file").exists();
    
  2. Auf Datei prüfen

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
    
  3. Überprüfen Sie das Verzeichnis.

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isDirectory()) {}
    
  4. Java 7 Weg. 

    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
    
13
Raghu K Nair

Nicht Fangen Sie einfach den FileNotFoundException. Das Dateisystem muss prüfen, ob die Datei trotzdem vorhanden ist. Es macht keinen Sinn, das alles zweimal zu machen, und es gibt mehrere Gründe, warum nicht:

  • code verdoppeln
  • das Timing-Fenster-Problem, bei dem die Datei möglicherweise vorhanden ist, wenn Sie testen, nicht jedoch beim Öffnen, oder umgekehrt, und
  • die Tatsache, dass, wie die Existenz dieser Frage zeigt, Sie möglicherweise den falschen Test machen und die falsche Antwort erhalten.

Versuchen Sie nicht, das System zu erraten. Es weiß Versuchen Sie nicht, die Zukunft vorherzusagen. Im Allgemeinen können Sie am besten prüfen, ob die Ressource any verfügbar ist, indem Sie versuchen, sie zu verwenden.

9
user207421

Für mich eine Kombination der akzeptierten Antwort von Sean A.O. Harney und der daraus resultierende Kommentar von Cort3z scheint die beste Lösung zu sein.

Verwendete den folgenden Ausschnitt:

File f = new File(filePathString);
if(f.exists() && f.isFile()) {
    //do something ...
}

Hoffe das könnte jemandem helfen.

8
X-Fate

Es lohnt sich auch, sich mit Commons FileUtils https://commons.Apache.org/proper/commons-io/javadocs/api-2.5/org/Apache/commons/io/FileUtils.html .__ vertraut zu machen hat zusätzliche Methoden zum Verwalten von Dateien und ist oft besser als JDK.

4

Ich weiß, dass ich in diesem Thread etwas spät bin. Hier ist jedoch meine Antwort, gültig ab Java 7.

Der folgende Ausschnitt

if(Files.isRegularFile(Paths.get(pathToFile))) {
    // do something
}

ist vollkommen zufriedenstellend, da die Methode isRegularFilefalse zurückgibt, wenn die Datei nicht vorhanden ist. Daher muss nicht geprüft werden, ob Files.exists(...).

Beachten Sie, dass andere Parameter Optionen sind, die angeben, wie Links behandelt werden sollen. Standardmäßig werden symbolische Links verfolgt.

Aus der Java Oracle-Dokumentation

4
avi.elkharrat

Zum Beispiel, wenn Sie ein Dateiverzeichnis haben und prüfen möchten, ob es existiert

File tmpDir = new File("/var/tmp");

boolean exists = tmpDir.exists();

exists gibt false zurück, wenn die Datei nicht vorhanden ist

source: https://alvinalexander.com/Java/java-file-exists-directory-exists

3
ID127898

Einfaches Beispiel mit guten Codierungspraktiken, das alle Fälle abdeckt:

 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);
            }
        }
    }

Referenz und weitere Beispiele unter

https://zgrepcode.com/examples/Java/java/nio/file/filealreadyexistsexception-implementations

2
Amandeep Singh

Wenn Sie nach einer File in einem Verzeichnis suchen möchten dir

String directoryPath = dir.getAbsolutePath()
boolean check = new File(new File(directoryPath), aFile.getName()).exists();

und überprüfen Sie das Ergebnis check

1
user3618182

File.exists() Um zu überprüfen, ob eine Datei vorhanden ist, wird ein boolescher Wert zurückgegeben, um den Status der Prüfoperation anzuzeigen. true, wenn die Datei existiert; false wenn nicht vorhanden.

File f = new File("c:\\test.txt");

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}
1
KIBOU Hassan
new File("/path/to/file").exists(); 

wird den Trick tun

1
user4833142

Verwenden Sie keinen Dateikonstruktor mit String.
Das kann nicht funktionieren! 
Verwenden Sie stattdessen URI:

File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) { 
    // to do
}
1
iviorel

Sie können den folgenden Code zur Überprüfung verwenden:

import Java.io.File;
class Test{
    public static void main(String[] args){
        File f = new File(args[0]); //file name will be entered by user at runtime
        System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise

        if(f.exists())
        {
             //executable code;
        }
    }
}
0
Pankti

Sie können es so machen

import Java.nio.file.Paths;

String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
    //...do somethinh
}
0
Rodrigo Pavan

Es gibt einen bestimmten Zweck, diese Methoden zu entwerfen. Wir können nicht sagen, dass Sie jemanden verwenden, um zu überprüfen, ob eine Datei vorhanden ist oder nicht.

  1. isFile (): Prüft, ob die Datei , die durch diesen abstrakten Pfadnamen angegeben wird, eine normale Datei ist.
  2. exists (): Testet, ob die Datei oder das Verzeichnis existiert, die durch diesen abstrakten Pfadnamen gekennzeichnet sind. docs.Oracle.com
0
Atul Jain