Criar um arquivo é uma operação de IO muito comum. Hoje vamos explorar diferentes maneiras de criar um arquivo em Java.
Criar arquivo em Java
Existem três métodos populares para criar um arquivo em Java. Vamos examiná-los um por um.
-
File.createNewFile()
java.io.File
classe pode ser usada para criar um novo arquivo em Java. Quando inicializamos o objeto File, fornecemos o nome do arquivo e então podemos chamar o métodocreateNewFile()
para criar um novo arquivo em Java. O métodocreateNewFile()
da classe File retornatrue
se o novo arquivo for criado efalse
se o arquivo já existir. Este método também lança uma java.io.IOException quando não consegue criar o arquivo. Os arquivos criados estão vazios e têm zero bytes. Ao criar o objeto File, passando o nome do arquivo, ele pode ser com caminho absoluto, ou podemos fornecer apenas o nome do arquivo ou o caminho relativo. Para um caminho não absoluto, o objeto File tenta localizar arquivos no diretório raiz do projeto. Se executarmos o programa a partir da linha de comando, para o caminho não absoluto, o objeto File tenta localizar arquivos a partir do diretório atual. Ao criar o caminho do arquivo, devemos usar a propriedade do Sistemafile.separator
para tornar nosso programa independente da plataforma. Vamos ver diferentes cenários com um programa Java simples para criar um novo arquivo em Java.package com.journaldev.files; import java.io.File; import java.io.IOException; public class CreateNewFile { /** * Esta classe mostra como criar um arquivo em Java * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String fileSeparator = System.getProperty("file.separator"); //nome absoluto do arquivo com caminho String absoluteFilePath = fileSeparator+"Users"+fileSeparator+"pankaj"+fileSeparator+"file.txt"; File file = new File(absoluteFilePath); if(file.createNewFile()){ System.out.println(absoluteFilePath+" Arquivo Criado"); }else System.out.println("Arquivo "+absoluteFilePath+" já existe"); //apenas o nome do arquivo file = new File("file.txt"); if(file.createNewFile()){ System.out.println("file.txt Arquivo Criado no diretório raiz do projeto"); }else System.out.println("Arquivo file.txt já existe no diretório raiz do projeto"); //caminho relativo String relativePath = "tmp"+fileSeparator+"file.txt"; file = new File(relativePath); if(file.createNewFile()){ System.out.println(relativePath+" Arquivo Criado no diretório raiz do projeto"); }else System.out.println("Arquivo "+relativePath+" já existe no diretório raiz do projeto"); } }
Ao executar o programa acima a partir do Eclipse IDE pela primeira vez, a seguinte saída é produzida.
/Users/pankaj/file.txt Arquivo Criado file.txt Arquivo Criado no diretório raiz do projeto Exceção na thread "main" java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32)
Para o caminho relativo, lança IOException porque o diretório
tmp
não está presente na pasta raiz do projeto. Portanto, fica claro quecreateNewFile()
apenas tenta criar o arquivo e qualquer diretório, seja absoluto ou relativo, deve estar presente antecipadamente, caso contrário, lançaIOException
. Então, criei o diretório “tmp” na pasta raiz do projeto e executei o programa novamente, aqui está a saída.Arquivo /Users/pankaj/file.txt já existe Arquivo file.txt já existe no diretório raiz do projeto tmp/file.txt Arquivo Criado no diretório raiz do projeto
Os dois primeiros arquivos já estavam presentes, então
createNewFile()
retornafalse
, o terceiro arquivo foi criado no diretório tmp e retorna true. Qualquer execução subsequente resulta na seguinte saída:Arquivo /Users/pankaj/file.txt já existe Arquivo file.txt já existe no diretório raiz do projeto Arquivo tmp/file.txt já existe no diretório raiz do projeto
Se você executar o mesmo programa a partir do diretório de classes do terminal, aqui está a saída.
//primeira execução do diretório de saída das classes pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile Arquivo /Users/pankaj/file.txt já existe file.txt Arquivo Criado no diretório raiz do projeto Exceção na thread "main" java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32) //o diretório tmp não existe, vamos criá-lo pankaj:~/CODE/JavaFiles/bin$ mkdir tmp //segunda execução pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile Arquivo /Users/pankaj/file.txt já existe Arquivo file.txt já existe no diretório raiz do projeto tmp/file.txt Arquivo Criado no diretório raiz do projeto //terceira e subsequentes execuções pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile Arquivo /Users/pankaj/file.txt já existe Arquivo file.txt já existe no diretório raiz do projeto Arquivo tmp/file.txt já existe no diretório raiz do projeto
-
FileOutputStream.write(byte[] b)
Se você deseja criar um novo arquivo e ao mesmo tempo escrever alguns dados nele, você pode usar o método write do FileOutputStream. Abaixo está um exemplo simples de código para mostrar seu uso. As regras para caminho absoluto e relativo discutidas acima também são aplicáveis neste caso.
String fileData = "Pankaj Kumar"; FileOutputStream fos = new FileOutputStream("name.txt"); fos.write(fileData.getBytes()); fos.flush(); fos.close();
-
Java NIO Files.write()
Pode-se usar a classe Java NIO Files para criar um novo arquivo e escrever alguns dados nele. Esta é uma boa opção porque não precisamos nos preocupar com o fechamento dos recursos de E/S.
String dadosDoArquivo = "Pankaj Kumar"; Files.write(Paths.get("nome.txt"), dadosDoArquivo.getBytes());
Isso é tudo para criar um novo arquivo no programa Java.
Você pode conferir mais exemplos de Java básico em nosso Repositório no GitHub.
Source:
https://www.digitalocean.com/community/tutorials/java-create-new-file