source

Java에 파일이 있는지 확인하려면 어떻게 해야 하나요?

factcode 2022. 10. 27. 23:01
반응형

Java에 파일이 있는지 확인하려면 어떻게 해야 하나요?

Java에서 읽기 위해 파일을 열기 전에 파일이 존재하는지 확인하는 방법(Perl과 동등) -e $filename)?

SO에 관한 유일한 유사한 질문은 파일 작성에 관한 것이며, 따라서 다음과 같이 답변되었습니다.FileWriter여기에는 해당되지 않습니다.

가능하다면 "Call API to open a file and catch when exception that you checked to no file"이라는 텍스트가 아닌 true/false를 반환하는 실제 API 호출을 선호하지만, 저는 후자를 감수할 수 있습니다.

사용방법:

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

를 사용하는 것을 추천합니다.isFile()대신exists()대부분의 경우 경로가 존재하는 파일뿐만 아니라 파일을 가리키는지 확인합니다.그 것을 기억하라.exists()경로가 디렉토리를 가리키면 true가 반환됩니다.

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

new File("C:/").exists()true는 반환되지만 파일로서 열고 읽을 수 없습니다.

Java SE 7에서 nio를 사용함으로써

import java.nio.file.*;

Path path = Paths.get(filePathString);

if (Files.exists(path)) {
  // file exist
}

if (Files.notExists(path)) {
  // file is not exist
}

둘 다라면exists그리고.notExistsfalse를 반환합니다.파일의 존재를 확인할 수 없습니다.(이 경로에 대한 접근권이 없을 수 있음)

확인하실 수 있습니다.path디렉토리 또는 일반 파일입니다.

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

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

Java SE 7 튜토리얼을 확인해 주세요.

Java 8 사용:

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

이렇게 해도 실제 파일은 생성되지 않습니다.파일 클래스의 개체를 만듭니다.파일을 물리적으로 작성하려면 명시적으로 작성해야 합니다.

f.createNewFile();

그렇게f.exists()를 사용하여 이러한 파일이 존재하는지 여부를 확인할 수 있습니다.

f.isFile() && f.canRead()

이를 실현하는 방법은 여러 가지가 있습니다.

  1. 단지 존재하기 위해서.파일 또는 디렉토리일 수 있습니다.

    new File("/path/to/file").exists();
    
  2. 파일 확인

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
    
  3. 디렉토리를 확인합니다.

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isDirectory()) {}
    
  4. 자바 7웨이

    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
    

하지 마 그냥 잡으면 돼FileNotFoundException.파일 시스템은 파일이 존재하는지 여부를 테스트해야 합니다.이 모든 작업을 두 번 수행하는 것은 의미가 없으며, 다음과 같은 몇 가지 이유를 들 수 있습니다.

  • 암호를 이중으로 하다
  • 테스트 시에는 파일이 존재하지만 열 때는 존재하지 않거나 그 반대인 타이밍 윈도우 문제
  • 이 문제의 존재에서 알 수 있듯이 시험을 잘못 치르고 틀린 답을 얻을 수 있다는 사실.

시스템을 의심하려고 하지 마세요.알고 있어요.그리고 미래를 예측하려고 하지 마세요.일반적으로 리소스를 사용할 수 있는지 여부를 테스트하는 가장 좋은 방법은 리소스를 사용해 보는 것입니다.

다음을 사용할 수 있습니다.File.exists()

구글에서 "filename file exists"에 대한 첫 번째 히트:

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

저는 션 A.O.가 인정해준 답변의 조합입니다.Harney와 그에 따른 Cort3z의 코멘트가 최선의 해결책인 것 같습니다.

다음 스니펫 사용:

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

이게 도움이 됐으면 좋겠어요.

이 상황에서 내가 좀 늦은 거 알아.단, Java 7 이상부터 유효한 답변입니다.

다음 스니펫

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

방법이기 이다. 왜냐하면 방법은isRegularFilefalse파일이 존재하지 않는 경우. 때문에 굳이 는 없습니다.Files.exists(...).

기타 파라미터는 링크 처리 방법을 나타내는 옵션입니다.기본적으로는 심볼릭링크가 계속됩니다.

Java Oracle 문서 참조

Commons File Utils https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html 에는 파일 관리를 위한 추가 방법이 있으며 JDK보다 더 나은 경우가 많습니다.

좋은 코딩 관행과 모든 사례를 포함하는 간단한 예:

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

레퍼런스 및 기타 예:

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

문자열과 함께 파일 생성자를 사용하지 마십시오.
이거 안 될 수도 있어!
URI "URI"를 합니다.

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

이렇게 하면 돼

import java.nio.file.Paths;

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

이러한 방법을 설계하는 데는 특별한 목적이 있습니다.파일의 존재 여부를 확인하기 위해 다른 사람을 사용한다고 말할 수 없습니다.

  1. is File():이 추상 경로 이름으로 표시된 파일이 일반 파일인지 테스트합니다.
  2. exists():이 추상 경로 이름으로 표시된 파일 또는 디렉터리가 있는지 테스트합니다.docs.oracle.com

언급URL : https://stackoverflow.com/questions/1816673/how-do-i-check-if-a-file-exists-in-java

반응형