Java - FileOutputStream 覆盖文件,但它似乎没有改变
Java - FileOutputStream overwrites file, but it doesn't seem to change
因此,当我使用 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 IDEA,并且在资源文件夹中有这个文件。它只是一个包含内容 Not changed
的 .txt 文件,所以我可以知道它是否被覆盖了。
我想知道这个问题是否与代码有关,如果是,我该如何解决?
听起来很傻,但请尝试在打开文件之前刷新文件夹。
原来我不应该使用 Object.class.getResource(fileName)
从类路径打开文件,而是直接实例化一个文件对象。
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指出的那样,我认为这与路径有关。
因此,当我使用 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 IDEA,并且在资源文件夹中有这个文件。它只是一个包含内容 Not changed
的 .txt 文件,所以我可以知道它是否被覆盖了。
我想知道这个问题是否与代码有关,如果是,我该如何解决?
听起来很傻,但请尝试在打开文件之前刷新文件夹。
原来我不应该使用 Object.class.getResource(fileName)
从类路径打开文件,而是直接实例化一个文件对象。
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指出的那样,我认为这与路径有关。