Java - FileOutputStream перезаписывает файл, но, похоже, он не меняется - PullRequest
1 голос
/ 07 января 2020

Итак, когда я пишу в файл, используя FileOutputStream, он меняет содержимое файла, как если бы я читал его с InputStream, я получал именно то, что написал. Однако, когда я открываю файл в каталоге ресурсов, он остается прежним, несмотря на его изменение.

Мой код:

import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;

public class Program {

    public static void main(String[] args) throws URISyntaxException, IOException {
        String edit = "Edit2";
        String fileName = "/File.txt";
        URL url = Object.class.getResource(fileName);

        try (FileOutputStream fos = new FileOutputStream(new File(url.toURI()))) {
            fos.write(edit.getBytes());
        }

        try(InputStream is = Object.class.getResourceAsStream(fileName)) {
            StringBuilder sb = new StringBuilder();
            int read = is.read();
            while (read != -1) {
                sb.append((char) read);
                read = is.read();
            }
            System.out.println(sb.toString());
        }

    }
}

Кстати, я использую IntelliJ ИДЕЯ, и поместите этот файл в папку ресурсов. Это просто файл .txt с содержимым Not changed, поэтому я могу знать, был ли он перезаписан.

Я хотел бы знать, связана ли эта проблема с кодом, и если да, то как я могу это сделать? исправить это?

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Оказывается, я не должен использовать Object.class.getResource(fileName) для открытия файла из пути к классам, а вместо этого непосредственно создавать экземпляр объекта File.

import java.io.*;

public class Program {
    public static void main(String[] args) throws IOException {
        String edit = "Edit";
        String fileName = "resources/File.txt";
        File file = new File(fileName);

        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(edit.getBytes());
        }

        try (InputStream is = new FileInputStream(file)) {
            StringBuilder sb = new StringBuilder();
            int read = is.read();
            while (read != -1) {
                sb.append((char) read);
                read = is.read();
            }
            System.out.println(sb.toString());
        }
    }
}

Я полагал, что это связано с путем, как CHN указал.

0 голосов
/ 07 января 2020

Звучит глупо, но попробуйте обновить папку перед открытием файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...