为什么新的FileWriter(“ abc.txt”)创建一个新文件而新的File(“ abc.txt”)却没有? - java

new File("abc.txt")不会创建实际文件,而new FileWriter("abc.txt")会在磁盘上创建文件。在查看源代码时,我发现new FileWriter("abc.txt")最终创建了一个文件,如new File()

参考方案

java.io.File的构造方法不会在磁盘上创建文件。它只是文件路径的抽象。该文件是在您写入文件时创建的。

创建FileWriter时,它将调用FileOutputStream的构造函数,该构造函数调用一系列安全检查,然后调用:

if (append) {
    openAppend(name);
} else {
    open(name);
}

调用open()会在磁盘上创建文件。

编辑:

这是open()的定义方式:

/**
 * Opens a file, with the specified name, for writing.
 * @param name name of file to be opened
 */
private native void open(String name) throws FileNotFoundException;

“ finally”子句在异常处理中的好处 - java

作为对此的新手,在异常处理中使用finally子句有什么好处。换句话说,什么时候最好使用它,什么时候最好不要使用它。我唯一想到的就是关闭输入/输出流……还有其他好处? 参考方案 StinePike撰写的任何内容都很完美,但我想在其中添加一些内容。无论是否发生异常,都将执行finally块...。因此,我们可以通过在try块以及catch block()中写入…

扩展多个接口的接口 - java

下面的代码,interface I3{ boolean abc(); }; interface I2{ void abc(); }; public class Example1 implements I3, I2{ @Override public void abc() { //Eclipse IDE picked this unimplemented me…

gradle java9无法使用工具链:“ JDK 8(1.8)”来定位平台:“ Java SE 9” - java

我想在月食氧气内的gradle项目中使用java9。当我 跑:Run as> Gradle Test on GreeterTest.java 使用以下代码:package hello.test; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…