Este código verifica primeiro a existência do diretório e o cria, caso contrário, e cria o arquivo depois. Observe que não pude verificar algumas de suas chamadas de método, pois não tenho seu código completo, então estou assumindo que as chamadas para coisas como getTimeStamp()
e getClassName()
funcionarão. Você também deve fazer algo com o possível IOException
que pode ser lançado ao usar qualquer uma das java.io.*
classes - ou sua função que grava os arquivos deve lançar essa exceção (e ser tratada em outro lugar), ou você deve fazer isso no método diretamente. Além disso, presumi que id
seja do tipo String
- não sei, pois seu código não o define explicitamente. Se for algo como um int
, você provavelmente deve convertê-lo em a String
antes de usá-lo no fileName, como fiz aqui.
Além disso, substituí suas append
ligações por concat
ou +
conforme achei apropriado.
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);
}
}
Você provavelmente não deve usar nomes de caminho simples como este se quiser executar o código no Microsoft Windows - não tenho certeza do que fará com o /
nos nomes de arquivo. Para portabilidade total, você provavelmente deve usar algo como File.separator para construir seus caminhos.
Edit : De acordo com um comentário de JosefScript abaixo, não é necessário testar a existência de diretório. A directory.mkdir()
chamada retornará true
se criou um diretório e, false
caso não o tenha feito, incluindo o caso em que o diretório já existia.
mkdirs()
método.versão java 8+
Os Files.createDirectories
cria um novo diretório e diretórios pais que não existem.
O método não lança uma exceção se o diretório já existir.
fonte
Tentando fazer isso o mais curto e simples possível. Cria um diretório se ele não existir e retorna o arquivo desejado:
fonte
Eu sugeriria o seguinte para Java8 +.
fonte
Files.createFile(Files.createDirectories(path)).toFile()
deve serFiles.createDirectories(path).toFile()
por umaAccess Denied
razão.Files.createFile(Files.createDirectories(path))
não funciona conforme descrito no comentário acima.createDirectories
já cria um diretório com o nome do arquivo, por exemplo, "test.txt", portantocreateFile
irá falhar.código:
fonte
Usá-
java.nio.Path
lo seria bastante simples -fonte
Se você criar um aplicativo baseado na web, a melhor solução é verificar se o diretório existe ou não e, em seguida, criar o arquivo se ele não existir. Se existir, recrie novamente.
fonte