Java编译器没有事先检查ELSE条件(或者至少我认为这就是正在发生的事情…)

Java编译器没有事先检查ELSE条件(或者至少我认为这就是正在发生的事情…),java,if-statement,Java,If Statement,我有一个名为file.java的简单类文件,其中包含3个函数:createFile、writeContent和作为驱动程序的强制主函数: import java.io.*; class CreateFile { public static boolean createFile(File file, String fileName) throws IOException { if (file.createNewFile()){ System.ou

我有一个名为file.java的简单类文件,其中包含3个函数:createFile、writeContent和作为驱动程序的强制主函数:

import java.io.*;

class CreateFile {

    public static boolean createFile(File file, String fileName) throws IOException {
        if (file.createNewFile()){
            System.out.println(fileName + ": File created successfully!");
            return false;
        } else {
            System.out.println(fileName + ": File already existing!");
            return true;
        }
    }

    public static void writeContent(String fileName, String fileContent, boolean append) throws IOException {
        if (append = false) {
            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
        } else {
            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
        }
        writer.write(fileContent);
        writer.close();
    }

    public static void main(String[] args) throws IOException {

        String fileName = "file.txt";
        File file = new File(fileName);
        boolean append = createFile(file, fileName);
        String fileContent = "Hello, this is a test";
        writeContent(fileName, fileContent, append);
    }
}
问题在于函数writeContent,它在最后一行中被调用。有一个基本的if条件,检查写入过程是否需要附加到文件中,我知道这是不必要的,但我仍在测试,请耐心等待

我得到一个错误,说编译器找不到符号编写器,这意味着BufferedWriter是在检查if条件之前创建的。这正是我没有得到的:为什么不事先执行if条件

如果我在If和else语句中包含write命令,它工作得很好,但这会导致代码冗余,这正是我试图避免的:

    public static void writeContent(String fileName, String fileContent, boolean append) throws IOException {
        if (append = false) {
            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
            writer.write(fileContent);
            writer.close();
        } else {
            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
            writer.write(fileContent);
            writer.close();
        }
    }
我确信我对一些基本的和简单的东西很迟钝-你介意在这里给我一个提示吗?

改变这个:

if (append = false) {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, false));
} else {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
}
改为:

BufferedWriter writer;
if (append == false) {
    writer = new BufferedWriter(new FileWriter(fileName, false));
} else {
    writer = new BufferedWriter(new FileWriter(fileName, true));
}
如果在大括号{}内创建变量,则其作用域仅限于大括号。 因此,您应该在if之外创建writer,因为您以后会使用它。

您指定了append=false,而不是comparated append==false。 更好的风格是不要与真假相比较

或者干脆删除if语句:

     BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, append));

if append=false{应为if append==false{两个等号。为了避免这个问题,只需写if!appendif append=false是一个赋值,并且始终为true。您想写if!append insteadThank!似乎不是我代码中唯一的缺陷,因为错误仍然存在……我建议在if条件之外声明BufferedWriter,并给它赋值在它们里面。很少有一个很好的理由在Java中显式地比较true和false。顺便说一句,第二部分确实解决了这个问题。但编译错误的主要问题是,writer在以后使用时超出了范围。公平地说,这在链接副本中得到了回答。
     BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, append));