디렉토리가 존재하지 않는 경우는, 그 디렉토리에 파일을 작성합니다.
디렉토리가 존재하는 경우는, 새로운 디렉토리를 작성하지 않고, 그 특정의 디렉토리에 파일을 작성할 필요가 있습니다.
다음 코드는 새 디렉토리를 가진 파일만 생성하며 기존 디렉토리용 파일은 생성하지 않습니다.예를 들어 디렉토리 이름은 "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.*
classes - 파일을 쓰는 함수에서 이 예외가 발생하거나(다른 곳에서 처리됨) 메서드로 직접 수행해야 합니다.또, 저는 이렇게 생각했다.id
종류String
당신의 코드에 명확하게 정의되어 있지 않기 때문에 잘 모르겠습니다.만약 그게 다른 것이라면int
, 아마도 당신은 그것을 에 던져야 할 것이다.String
fileName에서 사용하기 전에 여기를 참조하십시오.
그리고, 나는 너의 것을 교체했다.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 로 코드를 실행하는 경우는, 이러한 베어 패스명을 사용하지 않는 것이 좋습니다.이러한 패스명이, Microsoft Windows 로 무엇을 실행할지는 잘 모르겠습니다./
파일명으로.완전한 휴대성을 위해 File.separator 등의 기능을 사용하여 경로를 구성해야 합니다.
편집: 아래 JosefScript의 코멘트에 따르면 디렉토리의 존재 여부를 테스트할 필요가 없습니다.그directory.mkdir()
콜이 반환됩니다.true
디렉토리가 생성된 경우,false
디렉토리가 이미 존재했던 경우를 포함하여, 그렇지 않은 경우.
Java 8+ 버전:
Files.createDirectories(Paths.get("/Your/Path/Here"));
그Files.createDirectories()
는 존재하지 않는 새로운 디렉토리와 부모 디렉토리를 작성합니다.디렉토리가 이미 존재하는 경우 이 메서드는 예외를 발생시키지 않습니다.
가능한 한 짧고 간단하게 하려고 노력하고 있습니다.디렉토리가 존재하지 않는 경우 디렉토리를 작성한 후 원하는 파일을 반환합니다.
/** 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);
}
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();
}
코드:
// 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);
}
를 사용한 심플한 솔루션java.nio.Path
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);
}
Web 베이스의 애플리케이션을 작성하는 경우는, 디렉토리의 유무를 확인해, 존재하지 않는 경우는 파일을 작성하는 것이 좋습니다.존재하는 경우는, 다시 작성합니다.
private File createFile(String path, String fileName) throws IOException {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(".").getFile() + path + fileName);
// Lets create the directory
try {
file.getParentFile().mkdir();
} catch (Exception err){
System.out.println("ERROR (Directory Create)" + err.getMessage());
}
// Lets create the file if we have credential
try {
file.createNewFile();
} catch (Exception err){
System.out.println("ERROR (File Create)" + err.getMessage());
}
return file;
}
언급URL : https://stackoverflow.com/questions/28947250/create-a-directory-if-it-does-not-exist-and-then-create-the-files-in-that-direct
'IT' 카테고리의 다른 글
PHP의 정수 인덱스를 사용하여 연결 배열 액세스 (0) | 2023.01.21 |
---|---|
Maria를 사용한 스프링 부트에서의 다중 데이터베이스DB (0) | 2023.01.21 |
JavaScript 개체 변수에 추가할 동적 키를 만들려면 어떻게 해야 합니까? (0) | 2023.01.21 |
PHP에서 복수 또는 단수를 사용하여 어레이 이름을 지정합니까? (0) | 2023.01.21 |
MySQL 워크벤치로 csv 파일을 Import하는 방법 (0) | 2023.01.15 |