Qual é a maneira mais simples de criar e gravar em um arquivo (texto) em Java?
Qual é a maneira mais simples de criar e gravar em um arquivo (texto) em Java?
Respostas:
Observe que cada uma das amostras de código abaixo pode ser lançada IOException
. Os blocos try / catch / finalmente foram omitidos por questões de brevidade. Consulte este tutorial para obter informações sobre o tratamento de exceções.
Observe que cada um dos exemplos de código abaixo substituirá o arquivo se ele já existir
Criando um arquivo de texto:
PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
Criando um arquivo binário:
byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();
Os usuários do Java 7+ podem usar a Files
classe para gravar em arquivos:
Criando um arquivo de texto:
List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);
//Files.write(file, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
Criando um arquivo binário:
byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
"PrintWriter prints formatted representations of objects to a text-output stream. "
a resposta do Bozho é mais correta, embora pareça complicada (você sempre pode envolvê-lo em algum método utilitário).
writer.close()
deve estar em um bloco finalmente
No Java 7 e superior:
try (Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("filename.txt"), "utf-8"))) {
writer.write("something");
}
Existem utilitários úteis para isso:
Observe também que você pode usar a FileWriter
, mas ela usa a codificação padrão, o que geralmente é uma má idéia - é melhor especificar a codificação explicitamente.
Abaixo está a resposta original anterior ao Java 7
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("filename.txt"), "utf-8"));
writer.write("Something");
} catch (IOException ex) {
// Report
} finally {
try {writer.close();} catch (Exception ex) {/*ignore*/}
}
Consulte também: Leitura, gravação e criação de arquivos (inclui NIO2).
close()
de qualquer fluxo enrolado em qualquer outro fechará também todos os fluxos internos.
Se você já possui o conteúdo que deseja gravar no arquivo (e não é gerado rapidamente), a java.nio.file.Files
adição no Java 7 como parte da E / S nativa fornece a maneira mais simples e eficiente de atingir seus objetivos.
Basicamente, criar e gravar em um arquivo é apenas uma linha, além de uma simples chamada de método !
O exemplo a seguir cria e grava em 6 arquivos diferentes para mostrar como ele pode ser usado:
Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("1st line", "2nd line");
byte[] data = {1, 2, 3, 4, 5};
try {
Files.write(Paths.get("file1.bin"), data);
Files.write(Paths.get("file2.bin"), data,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Files.write(Paths.get("file3.txt"), "content".getBytes());
Files.write(Paths.get("file4.txt"), "content".getBytes(utf8));
Files.write(Paths.get("file5.txt"), lines, utf8);
Files.write(Paths.get("file6.txt"), lines, utf8,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}
public class Program {
public static void main(String[] args) {
String text = "Hello world";
BufferedWriter output = null;
try {
File file = new File("example.txt");
output = new BufferedWriter(new FileWriter(file));
output.write(text);
} catch ( IOException e ) {
e.printStackTrace();
} finally {
if ( output != null ) {
output.close();
}
}
}
}
output.close()
lança IOException
Aqui está um pequeno exemplo de programa para criar ou substituir um arquivo. É a versão longa, para que possa ser entendida com mais facilidade.
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class writer {
public void writing() {
try {
//Whatever the file path is.
File statText = new File("E:/Java/Reference/bin/images/statsTest.txt");
FileOutputStream is = new FileOutputStream(statText);
OutputStreamWriter osw = new OutputStreamWriter(is);
Writer w = new BufferedWriter(osw);
w.write("POTATO!!!");
w.close();
} catch (IOException e) {
System.err.println("Problem writing to the file statsTest.txt");
}
}
public static void main(String[]args) {
writer write = new writer();
write.writing();
}
}
Uma maneira muito simples de criar e gravar em um arquivo em Java:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class CreateFiles {
public static void main(String[] args) {
try{
// Create new file
String content = "This is the content to write into create file";
String path="D:\\a\\hi.txt";
File file = new File(path);
// If file doesn't exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
// Write in file
bw.write(content);
// Close connection
bw.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
File.exists()/createNewFile()
código aqui é inútil e inútil. O sistema operacional já precisa fazer exatamente a mesma coisa quando ele new FileWriter()
é criado. Você está forçando tudo a acontecer duas vezes.
FileWriter
seguinte maneira: #new FileWriter(file.getAbsoluteFile(),true)
Usar:
try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) {
writer.write("text to write");
}
catch (IOException ex) {
// Handle me
}
Usar try()
fechará o fluxo automaticamente. Esta versão é curta, rápida (em buffer) e permite escolher a codificação.
Esse recurso foi introduzido no Java 7.
StandardCharsets.UTF_8
vez da string "utf-8" (isso evita falhas de digitação) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...
- java.nio.charset.StandardCharsets
é introduzida no java 7
Aqui estamos inserindo uma string em um arquivo de texto:
String content = "This is the content to write into a file";
File file = new File("filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close(); // Be sure to close BufferedWriter
Podemos facilmente criar um novo arquivo e adicionar conteúdo a ele.
Como o autor não especificou se eles exigem uma solução para versões Java que foram EoL'd (tanto pela Sun quanto pela IBM, e estas são tecnicamente as JVMs mais difundidas), e devido ao fato de que muitas pessoas parecem ter respondido ao pergunta do autor antes de ser especificado que é um arquivo de texto (não binário) , decidi fornecer minha resposta.
Em primeiro lugar, o Java 6 geralmente chegou ao fim da vida útil e, como o autor não especificou que ele precisa de compatibilidade com legados, acho que significa automaticamente o Java 7 ou superior (o Java 7 ainda não foi aprovado pela IBM). Portanto, podemos ver o tutorial de E / S do arquivo: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html
Antes do lançamento do Java SE 7, a classe java.io.File era o mecanismo usado para a E / S do arquivo, mas tinha várias desvantagens.
- Muitos métodos não lançaram exceções quando falharam; portanto, era impossível obter uma mensagem de erro útil. Por exemplo, se uma exclusão de arquivo falhasse, o programa receberia uma "falha de exclusão", mas não saberia se era porque o arquivo não existia, o usuário não tinha permissões ou havia outro problema.
- O método de renomeação não funcionou consistentemente entre plataformas.
- Não havia suporte real para links simbólicos.
- Foi desejado mais suporte para metadados, como permissões de arquivo, proprietário do arquivo e outros atributos de segurança. O acesso aos metadados do arquivo foi ineficiente.
- Muitos dos métodos de arquivo não foram dimensionados. Solicitar uma listagem de diretório grande em um servidor pode resultar em um travamento. Diretórios grandes também podem causar problemas de recursos de memória, resultando em uma negação de serviço.
- Não foi possível escrever um código confiável que pudesse percorrer recursivamente uma árvore de arquivos e responder adequadamente se houvesse links simbólicos circulares.
Bem, isso exclui o java.io.File. Se um arquivo não puder ser gravado / anexado, talvez você nem saiba o porquê.
Podemos continuar consultando o tutorial: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common
Se você tiver todas as linhas que escreverá (anexa) no arquivo de texto com antecedência , a abordagem recomendada é https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html# Você pode usar o seguinte comando: java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption ...-
Aqui está um exemplo (simplificado):
Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);
Outro exemplo (anexar):
Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);
Se você deseja gravar o conteúdo do arquivo, vá para : https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java .nio.charset.Charset-java.nio.file.OpenOption ...-
Exemplo simplificado (Java 8 ou superior):
Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
writer.append("Zero header: ").append('0').write("\r\n");
[...]
}
Outro exemplo (anexar):
Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
writer.write("----------");
[...]
}
Esses métodos exigem um esforço mínimo da parte do autor e devem ser preferidos a todos os outros ao serem gravados em arquivos [texto].
FileNotFoundException
que é lançado quando a operação falha.
Se você deseja ter uma experiência relativamente simples, também pode dar uma olhada no pacote Apache Commons IO , mais especificamente na FileUtils
classe .
Nunca se esqueça de verificar as bibliotecas de terceiros. Joda-Time para manipulação de datas, Apache Commons LangStringUtils
para operações comuns de strings e isso pode tornar seu código mais legível.
Java é uma ótima linguagem, mas a biblioteca padrão às vezes é um pouco de baixo nível. Poderoso, mas de baixo nível, no entanto.
FileUtils
é o static void write(File file, CharSequence data)
. Exemplo de utilização: import org.apache.commons.io.FileUtils;
FileUtils.write(new File("example.txt"), "string with data");
. FileUtils
também tem writeLines
, o que leva uma Collection
das linhas.
Se, por algum motivo, você quiser separar o ato de criar e gravar, o equivalente em Java de touch
é
try {
//create a file named "testfile.txt" in the current working directory
File myFile = new File("testfile.txt");
if ( myFile.createNewFile() ) {
System.out.println("Success!");
} else {
System.out.println("Failure!");
}
} catch ( IOException ioe ) { ioe.printStackTrace(); }
createNewFile()
faz uma verificação de existência e um arquivo é criado atomicamente. Isso pode ser útil se você quiser garantir que você foi o criador do arquivo antes de gravá-lo, por exemplo.
touch
no sentido geral, mas em seu uso secundário comum, criar um arquivo sem gravar dados nele. O objetivo documentado do toque é atualizar o registro de data e hora no arquivo. Criar o arquivo se ele não existir é realmente o efeito colateral e pode ser desativado com uma opção.
exists()/createNewFile()
seqüências são literalmente um desperdício de tempo e espaço.
Aqui estão algumas das maneiras possíveis de criar e gravar um arquivo em Java:
Usando FileOutputStream
try {
File fout = new File("myOutFile.txt");
FileOutputStream fos = new FileOutputStream(fout);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write("Write somthing to the file ...");
bw.newLine();
bw.close();
} catch (FileNotFoundException e){
// File was not found
e.printStackTrace();
} catch (IOException e) {
// Problem when writing to the file
e.printStackTrace();
}
Usando FileWriter
try {
FileWriter fw = new FileWriter("myOutFile.txt");
fw.write("Example of content");
fw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Usando PrintWriter
try {
PrintWriter pw = new PrintWriter("myOutFile.txt");
pw.write("Example of content");
pw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Usando OutputStreamWriter
try {
File fout = new File("myOutFile.txt");
FileOutputStream fos = new FileOutputStream(fout);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write("Soe content ...");
osw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Para mais informações, consulte este tutorial sobre Como ler e gravar arquivos em Java .
FileWriter
ou deveria OutputStreamWriter
ser fechado em um bloco finalmente?
Usar:
JFileChooser c = new JFileChooser();
c.showOpenDialog(c);
File writeFile = c.getSelectedFile();
String content = "Input the data here to be written to your file";
try {
FileWriter fw = new FileWriter(writeFile);
BufferedWriter bw = new BufferedWriter(fw);
bw.append(content);
bw.append("hiiiii");
bw.close();
fw.close();
}
catch (Exception exc) {
System.out.println(exc);
}
A melhor maneira é usar o Java7: o Java 7 apresenta uma nova maneira de trabalhar com o sistema de arquivos, juntamente com uma nova classe de utilitário - Arquivos. Usando a classe Files, podemos criar, mover, copiar, excluir arquivos e diretórios também; também pode ser usado para ler e gravar em um arquivo.
public void saveDataInFile(String data) throws IOException {
Path path = Paths.get(fileName);
byte[] strToBytes = data.getBytes();
Files.write(path, strToBytes);
}
Gravação com FileChannel Se você estiver lidando com arquivos grandes, o FileChannel poderá ser mais rápido que o IO padrão. O código a seguir grava String em um arquivo usando o FileChannel:
public void saveDataInFile(String data)
throws IOException {
RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
FileChannel channel = stream.getChannel();
byte[] strBytes = data.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
buffer.put(strBytes);
buffer.flip();
channel.write(buffer);
stream.close();
channel.close();
}
Escreva com DataOutputStream
public void saveDataInFile(String data) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
outStream.writeUTF(data);
outStream.close();
}
Escreva com FileOutputStream
Vamos agora ver como podemos usar o FileOutputStream para gravar dados binários em um arquivo. O código a seguir converte um String int bytes e grava os bytes no arquivo usando um FileOutputStream:
public void saveDataInFile(String data) throws IOException {
FileOutputStream outputStream = new FileOutputStream(fileName);
byte[] strToBytes = data.getBytes();
outputStream.write(strToBytes);
outputStream.close();
}
Escreva com PrintWriter , podemos usar um PrintWriter para escrever texto formatado em um arquivo:
public void saveDataInFile() throws IOException {
FileWriter fileWriter = new FileWriter(fileName);
PrintWriter printWriter = new PrintWriter(fileWriter);
printWriter.print("Some String");
printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);
printWriter.close();
}
Escreva com BufferedWriter: use BufferedWriter para gravar uma String em um novo arquivo:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(data);
writer.close();
}
anexe uma String ao arquivo existente:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
writer.append(' ');
writer.append(data);
writer.close();
}
Para criar um arquivo sem substituir o arquivo existente:
System.out.println("Choose folder to create file");
JFileChooser c = new JFileChooser();
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
c.showOpenDialog(c);
c.getSelectedFile();
f = c.getSelectedFile(); // File f - global variable
String newfile = f + "\\hi.doc";//.txt or .doc or .html
File file = new File(newfile);
try {
//System.out.println(f);
boolean flag = file.createNewFile();
if(flag == true) {
JOptionPane.showMessageDialog(rootPane, "File created successfully");
}
else {
JOptionPane.showMessageDialog(rootPane, "File already exists");
}
/* Or use exists() function as follows:
if(file.exists() == true) {
JOptionPane.showMessageDialog(rootPane, "File already exists");
}
else {
JOptionPane.showMessageDialog(rootPane, "File created successfully");
}
*/
}
catch(Exception e) {
// Any exception handling method of your choice
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String [] args) {
FileWriter fw= null;
File file =null;
try {
file=new File("WriteFile.txt");
if(!file.exists()) {
file.createNewFile();
}
fw = new FileWriter(file);
fw.write("This is an string written to a file");
fw.flush();
fw.close();
System.out.println("File written Succesfully");
} catch (IOException e) {
e.printStackTrace();
}
}
}
exists()/createNewFile()
seqüências são literalmente um desperdício de tempo e espaço.
package fileoperations;
import java.io.File;
import java.io.IOException;
public class SimpleFile {
public static void main(String[] args) throws IOException {
File file =new File("text.txt");
file.createNewFile();
System.out.println("File is created");
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write("Enter the text that you want to write");
writer.flush();
writer.close();
System.out.println("Data is entered into file");
}
}
exists()/createNewFile()
seqüências são literalmente um desperdício de tempo e espaço.
Apenas uma linha!
path
e line
são cordas
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes());
lines
. Se for um java.lang.String
, a chamada getBytes()
produzirá bytes usando a codificação padrão da plataforma , o que não é muito bom no caso geral.
Se estivermos usando o Java 7 e superior e também soubermos o conteúdo a ser adicionado (anexado) ao arquivo, podemos usar o método newBufferedWriter no pacote NIO.
public static void main(String[] args) {
Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
String text = "\n Welcome to Java 8";
//Writing to the file temp.txt
try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
Há alguns pontos a serem observados:
StandardCharsets
.try-with-resource
instrução na qual os recursos são fechados automaticamente após a tentativa.Embora o OP não tenha perguntado, apenas no caso de querermos procurar linhas com alguma palavra-chave específica, por exemplo confidential
, podemos usar APIs de fluxo em Java:
//Reading from the file the first line which contains word "confidential"
try {
Stream<String> lines = Files.lines(FILE_PATH);
Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst();
if(containsJava.isPresent()){
System.out.println(containsJava.get());
}
} catch (IOException e) {
e.printStackTrace();
}
Leitura e gravação de arquivos usando entrada e saída:
//Coded By Anurag Goel
//Reading And Writing Files
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class WriteAFile {
public static void main(String args[]) {
try {
byte array [] = {'1','a','2','b','5'};
OutputStream os = new FileOutputStream("test.txt");
for(int x=0; x < array.length ; x++) {
os.write( array[x] ); // Writes the bytes
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for(int i=0; i< size; i++) {
System.out.print((char)is.read() + " ");
}
is.close();
} catch(IOException e) {
System.out.print("Exception");
}
}
}
Basta incluir este pacote:
java.nio.file
E então você pode usar este código para escrever o arquivo:
Path file = ...;
byte[] buf = ...;
Files.write(file, buf);
No Java 8, use Arquivos e caminhos e a construção try-with-resources.
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class WriteFile{
public static void main(String[] args) throws IOException {
String file = "text.txt";
System.out.println("Writing to file: " + file);
// Files.newBufferedWriter() uses UTF-8 encoding by default
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(file))) {
writer.write("Java\n");
writer.write("Python\n");
writer.write("Clojure\n");
writer.write("Scala\n");
writer.write("JavaScript\n");
} // the file will be automatically closed
}
}
Existem algumas maneiras simples, como:
File file = new File("filename.txt");
PrintWriter pw = new PrintWriter(file);
pw.write("The world I'm coming");
pw.close();
String write = "Hello World!";
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
fw.write(write);
fw.close();
bw
está sem uso.
Você pode até criar um arquivo temporário usando uma propriedade do sistema , que será independente do sistema operacional em uso.
File file = new File(System.*getProperty*("java.io.tmpdir") +
System.*getProperty*("file.separator") +
"YourFileName.txt");
Usando a biblioteca Guava do Google, podemos criar e gravar em um arquivo com muita facilidade.
package com.zetcode.writetofileex;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
public class WriteToFileEx {
public static void main(String[] args) throws IOException {
String fileName = "fruits.txt";
File file = new File(fileName);
String content = "banana, orange, lemon, apple, plum";
Files.write(content.getBytes(), file);
}
}
O exemplo cria um novo fruits.txt
arquivo no diretório raiz do projeto.
Lendo coleção com os clientes e salvando em arquivo, com JFilechooser.
private void writeFile(){
JFileChooser fileChooser = new JFileChooser(this.PATH);
int retValue = fileChooser.showDialog(this, "Save File");
if (retValue == JFileChooser.APPROVE_OPTION){
try (Writer fileWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile())))){
this.customers.forEach((c) ->{
try{
fileWrite.append(c.toString()).append("\n");
}
catch (IOException ex){
ex.printStackTrace();
}
});
}
catch (IOException e){
e.printStackTrace();
}
}
}
Existem pelo menos várias maneiras de criar um arquivo e gravá-lo:
Arquivos pequenos (1.7)
Você pode usar um dos métodos de gravação para escrever bytes ou linhas em um arquivo.
Path file = Paths.get("path-to-file");
byte[] buf = "text-to-write-to-file".;
Files.write(file, buf);
Esses métodos cuidam da maior parte do trabalho para você, como abrir e fechar o fluxo, mas não se destinam ao tratamento de arquivos grandes.
Gravando arquivos maiores usando E / S de fluxo buffer (1.7)
O java.nio.file
pacote suporta o canal de E / S, que move dados em buffers, ignorando algumas das camadas que podem causar gargalo no fluxo de E / S.
String s = "much-larger-text-to-write-to-file";
try (BufferedWriter writer = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
writer.write(s, 0, s.length());
}
Essa abordagem é preferencial devido ao seu desempenho eficiente, especialmente ao concluir uma grande quantidade de operações de gravação. As operações em buffer têm esse efeito, pois não precisam chamar o método de gravação do sistema operacional para cada byte, reduzindo as operações de E / S dispendiosas.
Usando a API do NIO para copiar (e criar um novo) um arquivo com um Outputstream (1.7)
Path oldFile = Paths.get("existing-file-path");
Path newFile = Paths.get("new-file-path");
try (OutputStream os = new FileOutputStream(newFile.toFile())) {
Files.copy(oldFile, os);
}
Existem também métodos adicionais que permitem copiar todos os bytes de um fluxo de entrada para um arquivo.
FileWriter (texto) (<1.7)
Grava diretamente no arquivo (menos desempenho) e deve ser usado apenas quando o número de gravações for menor. Usado para gravar dados orientados a caracteres em um arquivo.
String s= "some-text";
FileWriter fileWriter = new FileWriter("C:\\path\\to\\file\\file.txt");
fileWriter.write(fileContent);
fileWriter.close();
FileOutputStream (binário) (<1.7)
FileOutputStream destina-se a escrever fluxos de bytes brutos, como dados de imagem.
byte data[] = "binary-to-write-to-file".getBytes();
FileOutputStream out = new FileOutputStream("file-name");
out.write(data);
out.close();
Com essa abordagem, deve-se considerar sempre escrever uma matriz de bytes em vez de escrever um byte de cada vez. A aceleração pode ser bastante significativa - até 10 vezes maior ou mais. Portanto, é recomendável usar os write(byte[])
métodos sempre que possível.