존재하지 않는 경우 디렉토리를 생성 한 다음 해당 디렉토리에 파일도 생성합니다.
조건은 디렉토리가 존재하는 경우 새 디렉토리를 생성하지 않고 해당 특정 디렉토리에 파일을 생성해야한다는 것입니다.
아래 코드는 기존 디렉토리가 아닌 새 디렉토리로 파일을 생성하는 것입니다. 예를 들어 디렉토리 이름은 "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);
}
'IT박스' 카테고리의 다른 글
Windows Batch Command를 사용하여 Jenkins에서 환경 변수를 어떻게 사용합니까? (0) | 2020.11.17 |
---|---|
Moment.js는 날짜에서 요일 이름을 얻습니다. (0) | 2020.11.17 |
maven-site 플러그인 3.3 java.lang.ClassNotFoundException : org.apache.maven.doxia.siterenderer.DocumentContent (0) | 2020.11.17 |
상대 URL을 전체 URL로 바꾸려면 어떻게합니까? (0) | 2020.11.17 |
내 jQuery 대화 상자를 중앙에 배치하려면 어떻게해야합니까? (0) | 2020.11.16 |