Java BufferedWriter не записывает в файл - PullRequest
0 голосов
/ 01 мая 2018

Я хочу записать некоторую строку в файл (используйте Java 8). Этот фрагмент кода компилируется без каких-либо ошибок, но не записывает в файл .... я noob ofcorz ... любое предложение?

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Main {
    private static final String FILENAME = "C:\\IntelliJfiles\\write-to- 
                                              file\\src\\pl\\sca\\file.txt";

    public static void main(String[] args) {

        try {
            String str = "kal";

            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);

            System.out.println("Done");

        }
        catch (Exception e) {
            System.out.println("There's no file");
            e.printStackTrace();
        }
    }
}

Ответы [ 4 ]

0 голосов
/ 01 мая 2018

попробуйте это

try {
            String str = "kal";
            BufferedWriter writer = new BufferedWriter(new 
            FileWriter(FILENAME));
            writer.write(str);
            writer.close();
            System.out.println("Done");

        }
0 голосов
/ 01 мая 2018

Вам нужно закрыть программу записи, вы можете использовать try-with-resources :

String str = "kal";

// we can use try-with-resources from java 7
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILENAME))) {
    writer.write(str);
}

System.out.println("Done");

Или просто добавьте writer.close():

writer.write(str);
writer.close();
0 голосов
/ 01 мая 2018

Альтернативой BufferWriter является Files.write (Path, byte [], OpenOption ...) , если вы хотите записать в файл только один раз.

String str = "test";
Path path = Paths.get("file.txt");

try {
    byte[] bytes = str.getBytes(StandardsCharsets.UTF_8);
    Files.write(path, bytes);
} catch (FileNotFoundException e) {
    // Handle file absence.
} catch (IOException e) {
    // Handle other exceptions related to io.
}

Примечание : Как уже упоминалось здесь перехват Exception не указывает на отсутствие файла во всех случаях. Ловите FileNotFoundException, если вы хотите обработать отсутствие файла или IOException для всех исключительных условий, связанных с io.

0 голосов
/ 01 мая 2018

Он может не записать в файл, пока вы его не закроете - запись на диск отнимает много времени, поэтому он ждет, пока не будет записано достаточное количество символов, прежде чем фактически поместить их в файл. Вот что означает Buffered in BufferedWriter. Если вы закроете его, он «сбросит» буфер на диск.

Вы можете закрыть его самостоятельно, используя writer.close()

Или вы можете использовать try-with-resources , который автоматически закроет программу записи:

try (FileWriter fw = new FileWriter("C:\\IntelliJfiles\\write-to-file\\src\\pl\\sca\\file.txt");
     BufferedWriter bw = new BufferedWriter(fw)){
    bw.write("kal");
} catch (Exception e) {
    e.printStackTrace();
}
...