IT박스

존재하지 않는 경우 디렉토리를 생성 한 다음 해당 디렉토리에 파일도 생성합니다.

itboxs 2020. 11. 17. 07:55
반응형

존재하지 않는 경우 디렉토리를 생성 한 다음 해당 디렉토리에 파일도 생성합니다.


조건은 디렉토리가 존재하는 경우 새 디렉토리를 생성하지 않고 해당 특정 디렉토리에 파일을 생성해야한다는 것입니다.

아래 코드는 기존 디렉토리가 아닌 새 디렉토리로 파일을 생성하는 것입니다. 예를 들어 디렉토리 이름은 "GETDIRECTION"과 같습니다.

String PATH = "/remote/dir/server/";

String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt");  

String directoryName = PATH.append(this.getClassName());   

File file  = new File(String.valueOf(fileName));

File directory = new File(String.valueOf(directoryName));

 if(!directory.exists()){

             directory.mkdir();
            if(!file.exists() && !checkEnoughDiskSpace()){
                file.getParentFile().mkdir();
                file.createNewFile();
            }
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();

이 코드는 먼저 디렉토리의 존재를 확인하고 그렇지 않은 경우 생성 한 다음 나중에 파일을 생성합니다. 나는 당신의 전체 코드를 가지고 있지 않는 한 내가 좋아하는 것들에 대한 호출을 믿고있어, 그래서 당신의 메서드 호출의 일부를 확인할 수주십시오 노트 getTimeStamp()getClassName()작동합니다. 또한 클래스 중 하나를 IOException사용할 때 발생할 수있는 가능한 작업을 수행해야 java.io.*합니다. 파일을 작성하는 함수가이 예외를 throw해야하고 (그리고 다른 곳에서 처리해야 함) 메서드에서 직접 수행해야합니다. 또한 나는 그것이 id유형 이라고 가정했습니다 String-귀하의 코드가 명시 적으로 정의하지 않았기 때문에 나는 모릅니다. .과 같은 다른 경우 여기에서 한 것처럼 fileName에서 사용하기 전에 int캐스트해야 String합니다.

또한 적절하다고 판단한대로 귀하의 append전화를 concat또는 +교체했습니다 .

public void writeFile(String value){
    String PATH = "/remote/dir/server/";
    String directoryName = PATH.concat(this.getClassName());
    String fileName = id + getTimeStamp() + ".txt";

    File directory = new File(directoryName);
    if (! directory.exists()){
        directory.mkdir();
        // If you require it to make the entire directory path including parents,
        // use directory.mkdirs(); here instead.
    }

    File file = new File(directoryName + "/" + fileName);
    try{
        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(value);
        bw.close();
    }
    catch (IOException e){
        e.printStackTrace();
        System.exit(-1);
    }
}

Microsoft Windows에서 코드를 실행하려는 경우 이와 같은 베어 경로 이름을 사용하지 않아야합니다 /. 파일 이름에서 무엇을할지 모르겠습니다 . 완전한 이식성을 위해서는 아마도 File.separator 와 같은 것을 사용 하여 경로를 구성해야합니다.

편집 : 아래 JosefScript 의 주석에 따르면 디렉토리 존재 여부를 테스트 할 필요가 없습니다. directory.mkdir()호출은 반환 true이 디렉토리를 만든 경우, 및 false디렉토리가 이미 존재하는 경우를 포함, 그것은 그랬다면 없습니다.


Java8 +에 대해 다음을 제안합니다.

/**
 * Creates a File if the file does not exist, or returns a
 * reference to the File if it already exists.
 */
private File createOrRetrieve(final String target) throws IOException{

    final Path path = Paths.get(target);

    if(Files.notExists(path)){
        LOG.info("Target file \"" + target + "\" will be created.");
        return Files.createFile(Files.createDirectories(path)).toFile();
    }
    LOG.info("Target file \"" + target + "\" will be retrieved.");
    return path.toFile();
}

/**
 * Deletes the target if it exists then creates a new empty file.
 */
private File createOrReplaceFileAndDirectories(final String target) throws IOException{

    final Path path = Paths.get(target);
    // Create only if it does not exist already
    Files.walk(path)
        .filter(p -> Files.exists(p))
        .sorted(Comparator.reverseOrder())
        .peek(p -> LOG.info("Deleted existing file or directory \"" + p + "\"."))
        .forEach(p -> {
            try{
                Files.createFile(Files.createDirectories(p));
            }
            catch(IOException e){
                throw new IllegalStateException(e);
            }
        });

    LOG.info("Target file \"" + target + "\" will be created.");

    return Files.createFile(
        Files.createDirectories(path)
    ).toFile();
}

Trying to make this as short and simple as possible. Creates directory if it doesn't exist, and then returns the desired file:

/** Creates parent directories if necessary. Then returns file */
private static File fileWithDirectoryAssurance(String directory, String filename) {
    File dir = new File(directory);
    if (!dir.exists()) dir.mkdirs();
    return new File(directory + "/" + filename);
}

code:

// Create Directory if not exist then Copy a file.


public static void copyFile_Directory(String origin, String destDir, String destination) throws IOException {

    Path FROM = Paths.get(origin);
    Path TO = Paths.get(destination);
    File directory = new File(String.valueOf(destDir));

    if (!directory.exists()) {
        directory.mkdir();
    }
        //overwrite the destination file if it exists, and copy
        // the file attributes, including the rwx permissions
     CopyOption[] options = new CopyOption[]{
                StandardCopyOption.REPLACE_EXISTING,
                StandardCopyOption.COPY_ATTRIBUTES

        };
        Files.copy(FROM, TO, options);


}

Using java.nio.Path it would be quite simple -

public static Path createFileWithDir(String directory, String filename) {
        File dir = new File(directory);
        if (!dir.exists()) dir.mkdirs();
        return Paths.get(directory + File.separatorChar + filename);
    }

참고URL : https://stackoverflow.com/questions/28947250/create-a-directory-if-it-does-not-exist-and-then-create-the-files-in-that-direct

반응형