Java FileOutputStream 존재하지 않는 경우 파일 작성


187

파일 (문자열 파일 이름)이 존재하지 않으면 파일을 생성하는 방식으로 FileOutputStream을 사용하는 방법이 있습니까?

FileOutputStream oFile = new FileOutputStream("score.txt", false);

답변:


302

FileNotFoundException파일이 존재하지 않고 생성 할 수없는 경우 ( doc ) 를 던지지 만 가능하면 파일 을 만듭니다. 할 수 있는지 아마해야 당신이를 만들기 전에 파일이 존재하는지 첫 번째 테스트 FileOutputStream(과 함께 만들 createNewFile()그렇지 않은 경우)

File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 

2
파일이 없으면 빈 .txt 파일을 어떻게 만들 수 있습니까?
Stefan Dunn

3
createNewFile()내 예제와 같이 메소드 가있는 @StefanDunn .
talnicolas

55
조건이 중복됩니다. 에 따르면 의 JavaDoc , createNewFile()그 자체가 원자 파일의 존재를 확인합니다.
aztek

8
@aztek 아마 코드 가독성을 향상시키기위한 조건을 떠날 수있을 것이다
Andrii Chernenko

2
createNewFile()여기에 시간 낭비입니다. 시스템은 이미 그렇게 할 것입니다. 당신은 그것을 두 번 보도록 강요하고 있습니다.
Lorne의 후작


23

존재 여부에 관계없이 빈 파일을 만들 수 있습니다 ...

new FileOutputStream("score.txt", false).close();

존재하는 경우 파일을 남기고 싶다면 ...

new FileOutputStream("score.txt", true).close();

존재하지 않는 디렉토리에 파일을 작성하려고하면 FileNotFoundException 만 발생합니다.


3
그것은 던져 FileNotFoundException두 경우 모두에서.
mixel

21
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

이것을 생성자 f에게 전달하십시오 FileOutputStream.


2
여기에 경쟁 조건이 있습니다. 다음과 같이 수행하는 것이 좋습니다. File f = new File ( "Test.txt"); if (! f.createNewFile ()) {System.out.println ( "파일이 이미 있습니다"); }
인류

19

아파치 커먼즈의 FileUtils 는 한 줄로 이것을 달성하는 아주 좋은 방법입니다.

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

존재하지 않는 경우 상위 폴더를 작성하고 존재하지 않는 경우 파일을 작성하고 파일 오브젝트가 디렉토리이거나 쓸 수없는 경우 예외를 발생시킵니다. 이것은 다음과 같습니다 .

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

현재 사용자가 작업을 수행 할 수없는 경우 위의 모든 작업에서 예외가 발생합니다.


4

존재하지 않는 경우 파일을 작성하십시오. 파일이 종료되면 내용을 지우십시오.

/**
 * 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();
    }
}

2

경로 및 파일을 사용하여 존재하지 않는 경우에만 파일을 작성하는 다른 방법을 제공하십시오.

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());

0

당신은 잠재적으로 얻을 수 있습니다 FileNotFoundException파일이 존재하지 않으면 .

자바 문서는 말합니다 :

파일을 사용할 수 있는지 또는 만들 수 있는지 여부는 기본 플랫폼 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html에 따라 다릅니다.

Java 7을 사용하는 경우 java.nio 패키지를 사용할 수 있습니다.

options 매개 변수는 파일을 작성하거나 여는 방법을 지정합니다. 파일이 없으면 파일을 작성하여 작성합니다.

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html


0

new FileOutputStream(f) 대부분의 경우 파일을 만들지 만 불행히도 FileNotFoundException이 발생합니다.

파일이 존재하지만 일반 파일이 아닌 디렉토리 인 경우, 존재하지 않지만 작성할 수 없거나 다른 이유로 열 수없는 경우

Javadoc에서

다시 말해 "파일을 만들 수 없습니다"라는 의미의 FileNotFoundException이 발생하지만 파일 생성이 실패한 이유를 찾을 수없는 경우가 많이있을 수 있습니다.

해결책은 훨씬 나은 오류 처리 기능을 제공하므로 File API에 대한 호출을 제거하고 Files API를 대신 사용하는 것입니다. 일반적으로 어떤 교체 new FileOutputStream(f)와 함께 Files.newOutputStream(p).

File API를 사용해야하는 경우 (예를 들어 File을 사용하여 외부 인터페이스를 사용하기 때문에)를 사용하면 Files.createFile(p)파일이 제대로 작성되고 작동하지 않는 이유를 알 수 있는지 여부를 알 수 있습니다. 어떤 사람들은 이것이 중복이라고 위에서 언급했습니다. 사실이지만 일부 경우에는 더 나은 오류 처리가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.