Запись в файл с использованием массива в цикле в Java [duplicate]

У меня возникла одна и та же проблема, и проблема заключалась в том, что у меня было несколько проектов в решении (Web и Droid), и хотя Default project был выбран в Package Manager Console, он использовал строку подключения из Droid project:

PM> update-database -Verbose
Using StartUp project 'Droid'. <-- DROID
Using NuGet project 'Web'. <-- WEB
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
<!-- BAD TARGET DATABASE -->
Target database is: 'DefaultConnection' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
   [REMOVED TEXT]
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

После установки Startup Project на Web и Default Project в Package Manger Console я получил его для работы.

1177
задан Wolf 14 February 2017 в 16:39
поделиться

18 ответов

Обратите внимание, что каждый из примеров кода ниже может выдать IOException. Блоки try / catch / finally для краткости опущены.

Создание текстового файла (обратите внимание, что это будет перезаписывать файл, если он уже существует):

PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();

Создание двоичного файла (это также перезапишет файл):

byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();

Пользователи Java 7+ могут использовать класс Files для записи в файлы :

Создание текстового файла:

List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, Charset.forName("UTF-8"));
//Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND);

Создание двоичного файла:

byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
1464
ответ дан Community 19 August 2018 в 04:33
поделиться
  • 1
    Стоит отметить, что PrintWriter усечет размер файла до нуля, если файл уже существует – Covar 21 May 2010 в 21:16
  • 2
    PrintWriter может использоваться (и часто используется), но не является (концептуально) правильным классом для задания. Из документов: "PrintWriter prints formatted representations of objects to a text-output stream. " Ответ Божо более правильный, хотя он выглядит громоздким (вы всегда можете обернуть его каким-то способом утилиты). – leonbloy 21 May 2010 в 21:40
  • 3
    – Marlon Abeykoon 25 April 2014 в 06:28
  • 4
    @MarlonAbeykoon Хороший вопрос. Ответ заключается в том, что он создаст текстовый файл в рабочем каталоге . Рабочий каталог - это любая директория, из которой вы выполняете свою программу. Например, если вы выполняете свою программу из командной строки, тогда рабочий каталог будет любой директорией, в которой вы находитесь & quot; & quot; в этот момент (в Linux, типа & quot; pwd & quot; для просмотра текущего рабочего каталога). Или, если я дважды щелкнул JAR-файл на своем рабочем столе, чтобы запустить его, тогда рабочий каталог будет рабочим столом. – Michael 2 September 2014 в 13:06
  • 5
    writer.close() должен быть в блоке finally – Thierry 11 May 2017 в 22:16
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();
          }
        }
    }
}
69
ответ дан Dut A. 19 August 2018 в 04:33
поделиться
  • 1
    Не было бы лучше поставить output.close () в блок finally? – qed 6 November 2014 в 01:00
  • 2
    Простой код здесь никогда не может быть ответом. Вы должны объяснить. – user207421 14 April 2017 в 01:34
  • 3
    на самом деле это не будет компилироваться, output.close() выбрасывает IOException – Bob Yoplait 9 November 2017 в 16:19

Если у вас уже есть контент, который вы хотите записать в файл (и не генерируется «на лету»), добавление java.nio.file.Files в Java 7 как часть встроенного ввода-вывода обеспечивает простейший и наиболее эффективный способ достижения ваших целей.

В основном создание и запись в файл - это только одна строка, более того, один простой вызов метода!

В следующем примере создается и записывается 6 разных файлы, чтобы продемонстрировать, как это можно использовать:

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();
}
118
ответ дан icza 19 August 2018 в 04:33
поделиться
  • 1
    Красиво сделано. Мне нравится пример file5 и file6. Чтобы проверить файл6, убедитесь, что вы дважды запускаете программу, затем увидите, что она снова добавляет строки. – tazboy 13 November 2016 в 05:22

Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете 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();
    }
}

Есть несколько замечаний:

  1. Всегда хорошая привычка указывать кодировку кодировки и для этого мы имеем константу в классе StandardCharsets.
  2. В коде используется инструкция try-with-resource, в которой ресурсы автоматически закрываются после попытки.

Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например confidential мы можем использовать потоковые API в 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();
}
4
ответ дан i_am_zero 19 August 2018 в 04:33
поделиться

Используя Google Guava-библиотеку, мы можем легко создать и записать файл.

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);
    }
}

В примере создается новый файл fruits.txt в корневом каталоге проекта.

2
ответ дан Jan Bodnar 19 August 2018 в 04:33
поделиться

Только одна строка! path и line являются строками

import java.nio.file.Files;
import java.nio.file.Paths;

Files.write(Paths.get(path), lines.getBytes());
5
ответ дан JonasCz 19 August 2018 в 04:33
поделиться
  • 1
    Ах, автор явно указал «текст». файлы. И текстовые файлы состоят из символов. Двоичные файлы состоят из байтов. Кроме того, неясно, что lines. Если это java.lang.String, то вызов getBytes() будет генерировать байты с использованием платформы default , что не очень хорошо в общем случае. – afk5min 13 May 2015 в 04:45

Вот некоторые из возможных способов создания и записи файла в Java:

Использование 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();
}

Использование 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();
}

Использование 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();
}

Использование 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();
}

Для дополнительной проверки этого руководства о том, как читать и записывать файлы в Java .

4
ответ дан Mahdi El Masaoudi 19 August 2018 в 04:33
поделиться

Если вы по какой-то причине хотите отделить действие создания и записи, эквивалент Java 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(), проверка наличия и файл создаются атомарно. Это может быть полезно, если вы хотите, чтобы вы были создателем файла, прежде чем писать его, например.

9
ответ дан Mark Peters 19 August 2018 в 04:33
поделиться
  • 1
    [touch] также обновляет временную метку файла как побочный эффект (если он уже существует). У этого также есть побочный эффект? – Ape-inago 21 August 2013 в 19:34
  • 2
    @ Ape-inago: В моей системе это, конечно, не было (он просто возвращает false и не влияет на файл). Я не имел в виду touch в общем смысле, а скорее в своем общем вторичном использовании для создания файла без записи данных на него. Задокументированная цель - обновить временную метку файла. Создание файла, если оно не существует, действительно является побочным эффектом и может быть отключено с помощью переключателя. – Mark Peters 21 August 2013 в 20:30
  • 3
    Почему-то так? Эти exists()/createNewFile() последовательности буквально являются пустой тратой времени и пространства. – user207421 26 November 2016 в 02:25

Вот небольшая примерная программа для создания или перезаписывания файла. Это длинная версия, поэтому ее легче понять.

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();
    }
}
39
ответ дан Nic Hartley 19 August 2018 в 04:33
поделиться

Чтение коллекции с клиентами и сохранение в файл с помощью 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();
        }
    }
}
358
ответ дан Peter Mortensen 19 August 2018 в 04:33
поделиться
  • 1
  • 2
    Похоже, у писателя нет метода writeln (). Он имеет только write () – YankeeWhiskey 11 July 2013 в 14:35
  • 3
    Если вы измените тип записи на BufferedWriter (который на самом деле есть), вы можете использовать writer.newLine () – Niek 5 December 2013 в 12:48
  • 4
    Не похоже, чтобы в конце наконец попытался / поймать. Я знаю причину, но это похоже на запах кода. – ashes999 7 December 2013 в 04:48
  • 5
    Следует отметить, что это Java 7-функция, поэтому не будет работать в предыдущих версиях Java. – Dan Temple 3 June 2014 в 08:34
  • 6
    это самый простой способ, который я нашел ... все проблемы решены здесь, и только текст необходимо вставить – Rohit ZP 15 July 2014 в 15:50
  • 7
    @Trengot Это так. Вызов close() в любом потоке, обернутом вокруг любого другого, также закроет все внутренние потоки. – Nic Hartley 18 November 2014 в 18:23
  • 8
    Можно использовать "константу" StandardCharsets.UTF_8 вместо "utf-8" String (Это предотвращает появление опечаток) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)... - java.nio.charset.StandardCharsets введен в java 7 – Ralph 29 March 2015 в 11:32
  • 9
    Обратите внимание, что закрытия BufferedWriter достаточно, так как он также заботится о закрытии FileWriter. – rbaleksandar 29 August 2015 в 13:48
  • 10
    Здесь код File.exists()/createNewFile() не имеет смысла и бесполезен. Операционная система уже должна делать то же самое, когда создается new FileWriter(). Вы заставляете все это происходить дважды. – user207421 26 November 2016 в 02:22
  • 11
    «Если файл не может быть написан / добавлен, вы, возможно, не сможете даже знать, почему» не соответствует действительности. Вы точно узнаете, почему, из текста FileNotFoundException, который вызывается, когда операция завершается с ошибкой. – user207421 26 November 2016 в 02:23
  • 12
    fw.close() является избыточным. – user207421 26 November 2016 в 02:24
  • 13
    bw не используется. – user207421 26 November 2016 в 02:26
  • 14
    Эти exists()/createNewFile() последовательности буквально являются пустой тратой времени и пространства. – user207421 26 November 2016 в 02:26
  • 15
    «Многие методы не выдавали исключений, когда они терпели неудачу, поэтому было невозможно получить полезное сообщение об ошибке. Например, если сбой файла не удался, программа получила бы «удалить сбой», но не знал бы, было ли это потому, что файл не существовал, у пользователя не было разрешений или возникла какая-то другая проблема. & quot; – afk5min 28 November 2016 в 15:48
  • 16
    Читайте, что я написал. ' Если файл не может быть записан / добавлен, , вы даже не сможете получить полезное сообщение об ошибке, неверно по той причине, о которой я сказал, и остается такой. Вы меняете тему. Ваш собственный предмет. – user207421 14 April 2017 в 01:36
  • 17
    Я рассмотрю встроенные реализации для типичных файловых систем (которые будут в OpenJDK, но у меня нет оснований думать, что эта часть будет отличаться в запатентованной Oracle JDK или значительно отличается в проприетарном IBM JDK и других) и обновление мой ответ основывался на этих выводах. Ваш комментарий имеет смысл - просто потому, что у «многих методов» могут быть проблемы, автор ясно заявил, что это только операция записи / добавления к файлу, о которой они заботятся. – afk5min 14 April 2017 в 06:48
  • 18
    Причина в том, что ни один из методов, которые вы вызываете, не может вызывать соответствующие исключения, содержащие соответствующие сообщения об ошибках. Если у вас есть контрпример, который поддерживает ваше утверждение, вам нужно его предоставить. – user207421 27 December 2017 в 13:48
  • 19
    File.exists () / createNewFile () не бессмысленна и расточительна. Я искал способ выполнить другой код, основываясь на том, присутствует ли файл уже. Это было очень полезно. – KirstieBallance 27 December 2017 в 18:50
  • 20
    Я использовал этот метод, но вы должны знать, что он каждый раз перезаписывает файл. Если вы хотите, чтобы он был добавлен в случае, если файл существует, вам необходимо создать экземпляр FileWriter следующим образом: new FileWriter(file.getAbsoluteFile(),true) – Adelin 23 February 2018 в 08:14
  • 21
    По той причине, о которой я говорил, это обе бессмысленно и . Вы вызываете тесты two , два создания, и удаление: и вы not выполняете другой код здесь в зависимости от того, присутствует ли файл уже. – user207421 29 June 2018 в 01:05
  • 22
    И точка перезаписи файла с новым контентом не указана. – user207421 29 June 2018 в 01:08

В Java 8 используйте файлы и пути и используя конструкцию 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
    }
}
1
ответ дан praveenraj4ever 19 August 2018 в 04:33
поделиться

Если вы хотите иметь относительно безболезненный опыт, вы также можете взглянуть на пакет Apache Commons IO , более конкретно класс FileUtils .

Никогда не забывайте проверять сторонние библиотеки. Joda-Time для обработки даты, Apache Commons Lang StringUtils для обычных операций с строками и, таким образом, сделает ваш код более читаемым.

Java - отличный язык, но стандартная библиотека иногда немного низкоуровневая. Мощный, но низкий уровень, тем не менее.

15
ответ дан Rory O'Kane 19 August 2018 в 04:33
поделиться

лучший способ - использовать Java7: Java 7 вводит новый способ работы с файловой системой, а также новый класс утилиты - Files. Используя класс Files, мы можем создавать, перемещать, копировать, удалять файлы и каталоги; его также можно использовать для чтения и записи в файл.

public void saveDataInFile(String data) throws IOException {
    Path path = Paths.get(fileName);
    byte[] strToBytes = data.getBytes();

    Files.write(path, strToBytes);
}

Запись с помощью FileChannel. Если вы имеете дело с большими файлами, FileChannel может быть быстрее стандартного ввода-вывода. Следующий код записывает String в файл с помощью 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();
}

Запись с помощью 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();
}

Запись с помощью FileOutputStream

Давайте посмотрим, как мы можем используйте FileOutputStream для записи двоичных данных в файл. Следующий код преобразует строковый int bytes и записывает байты в файл с помощью FileOutputStream:

public void saveDataInFile(String data) throws IOException {
    FileOutputStream outputStream = new FileOutputStream(fileName);
    byte[] strToBytes = data.getBytes();
    outputStream.write(strToBytes);

    outputStream.close();
}

Write with PrintWriter мы можем использовать PrintWriter для записи форматированного текста в файл:

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();
}

Запись с помощью BufferedWriter: используйте BufferedWriter для записи String в новый файл:

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
    writer.write(data);

    writer.close();
}

добавьте строку в существующий файл:

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
    writer.append(' ');
    writer.append(data);

    writer.close();
}
2
ответ дан sajad abasi 19 August 2018 в 04:33
поделиться
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();
        }
    }
}
6
ответ дан suresh manda 19 August 2018 в 04:33
поделиться
  • 1
    Эти exists()/createNewFile() последовательности буквально являются пустой тратой времени и пространства. – user207421 26 November 2016 в 02:25
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");
    }
}
6
ответ дан yole 19 August 2018 в 04:33
поделиться
  • 1
    Эти exists()/createNewFile() последовательности буквально являются пустой тратой времени и пространства. – user207421 26 November 2016 в 02:25

Вы даже можете создать временный файл с использованием системного свойства, которое не зависит от используемой ОС.

File file = new File(System.*getProperty*("java.io.tmpdir") +
                     System.*getProperty*("file.separator") +
                     "YourFileName.txt");
358
ответ дан Peter Mortensen 19 August 2018 в 04:33
поделиться
  • 1
    @leonbloy Я знаю, что это старый комментарий, но если кто-нибудь это увидит, вы не могли бы объяснить, почему «всегда полезно»? По крайней мере, здесь он говорит, что «эффективный эффективный» [Д0] docs.oracle.com/javase/1.5.0/docs/api/java/io/… – Juan 12 February 2013 в 19:27
  • 2
    Похоже, у писателя нет метода writeln (). Он имеет только write () – YankeeWhiskey 11 July 2013 в 14:35
  • 3
    Если вы измените тип записи на BufferedWriter (который на самом деле есть), вы можете использовать writer.newLine () – Niek 5 December 2013 в 12:48
  • 4
    Не похоже, чтобы в конце наконец попытался / поймать. Я знаю причину, но это похоже на запах кода. – ashes999 7 December 2013 в 04:48
  • 5
    Следует отметить, что это Java 7-функция, поэтому не будет работать в предыдущих версиях Java. – Dan Temple 3 June 2014 в 08:34
  • 6
    это самый простой способ, который я нашел ... все проблемы решены здесь, и только текст необходимо вставить – Rohit ZP 15 July 2014 в 15:50
  • 7
    @Trengot Это так. Вызов close() в любом потоке, обернутом вокруг любого другого, также закроет все внутренние потоки. – Nic Hartley 18 November 2014 в 18:23
  • 8
    Можно использовать "константу" StandardCharsets.UTF_8 вместо "utf-8" String (Это предотвращает появление опечаток) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)... - java.nio.charset.StandardCharsets введен в java 7 – Ralph 29 March 2015 в 11:32
  • 9
    Обратите внимание, что закрытия BufferedWriter достаточно, так как он также заботится о закрытии FileWriter. – rbaleksandar 29 August 2015 в 13:48
  • 10
    Здесь код File.exists()/createNewFile() не имеет смысла и бесполезен. Операционная система уже должна делать то же самое, когда создается new FileWriter(). Вы заставляете все это происходить дважды. – user207421 26 November 2016 в 02:22
  • 11
    «Если файл не может быть написан / добавлен, вы, возможно, не сможете даже знать, почему» не соответствует действительности. Вы точно узнаете, почему, из текста FileNotFoundException, который вызывается, когда операция завершается с ошибкой. – user207421 26 November 2016 в 02:23
  • 12
    fw.close() является избыточным. – user207421 26 November 2016 в 02:24
  • 13
    bw не используется. – user207421 26 November 2016 в 02:26
  • 14
    Эти exists()/createNewFile() последовательности буквально являются пустой тратой времени и пространства. – user207421 26 November 2016 в 02:26
  • 15
    «Многие методы не выдавали исключений, когда они терпели неудачу, поэтому было невозможно получить полезное сообщение об ошибке. Например, если сбой файла не удался, программа получила бы «удалить сбой», но не знал бы, было ли это потому, что файл не существовал, у пользователя не было разрешений или возникла какая-то другая проблема. & quot; – afk5min 28 November 2016 в 15:48
  • 16
    Читайте, что я написал. ' Если файл не может быть записан / добавлен, , вы даже не сможете получить полезное сообщение об ошибке, неверно по той причине, о которой я сказал, и остается такой. Вы меняете тему. Ваш собственный предмет. – user207421 14 April 2017 в 01:36
  • 17
    Я рассмотрю встроенные реализации для типичных файловых систем (которые будут в OpenJDK, но у меня нет оснований думать, что эта часть будет отличаться в запатентованной Oracle JDK или значительно отличается в проприетарном IBM JDK и других) и обновление мой ответ основывался на этих выводах. Ваш комментарий имеет смысл - просто потому, что у «многих методов» могут быть проблемы, автор ясно заявил, что это только операция записи / добавления к файлу, о которой они заботятся. – afk5min 14 April 2017 в 06:48
  • 18
    Причина в том, что ни один из методов, которые вы вызываете, не может вызывать соответствующие исключения, содержащие соответствующие сообщения об ошибках. Если у вас есть контрпример, который поддерживает ваше утверждение, вам нужно его предоставить. – user207421 27 December 2017 в 13:48
  • 19
    File.exists () / createNewFile () не бессмысленна и расточительна. Я искал способ выполнить другой код, основываясь на том, присутствует ли файл уже. Это было очень полезно. – KirstieBallance 27 December 2017 в 18:50
  • 20
    Я использовал этот метод, но вы должны знать, что он каждый раз перезаписывает файл. Если вы хотите, чтобы он был добавлен в случае, если файл существует, вам необходимо создать экземпляр FileWriter следующим образом: new FileWriter(file.getAbsoluteFile(),true) – Adelin 23 February 2018 в 08:14
  • 21
    По той причине, о которой я говорил, это обе бессмысленно и . Вы вызываете тесты two , два создания, и удаление: и вы not выполняете другой код здесь в зависимости от того, присутствует ли файл уже. – user207421 29 June 2018 в 01:05
  • 22
    И точка перезаписи файла с новым контентом не указана. – user207421 29 June 2018 в 01:08
365
ответ дан Peter Mortensen 30 October 2018 в 16:22
поделиться
365
ответ дан Peter Mortensen 30 October 2018 в 16:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: