Java编译器没有事先检查ELSE条件(或者至少我认为这就是正在发生的事情…)
我有一个名为file.java的简单类文件,其中包含3个函数:createFile、writeContent和作为驱动程序的强制主函数: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
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));