java - Java 编译器没有事先检查 IF ELSE 条件(或者至少我认为这是正在发生的事情......)
问题描述
我有一个名为File.java的简单类文件,其中包含 3 个函数:createFile、writeContent和作为驱动程序的强制性main函数:
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条件,检查写入过程是否需要追加到文件中(我知道这不是必需的,但我还在测试,所以请多多包涵)。
我收到一条错误消息,指出编译器找不到符号writer,这意味着 BufferedWriter编写器是在检查 if 条件之前创建的。这正是我没有得到的:为什么不事先执行 if 条件?
如果我在 if 和 else 语句中包含写命令,它会很好地工作,但这会导致代码冗余,这是我试图规避的:
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));
}
如果您在大括号 {} 内创建变量,则其范围仅限于它们。因此,您应该创建writer
outside if
,因为您稍后会使用它。
推荐阅读
- php - PHP -> 运算符的官方文档及其相对于其他运算符的优先级在哪里
- java - 提取 CSV 文件中具有搜索值的所有行
- firebase - Angular Web App 和 Firebase 云消息传递
- javascript - Vue条件渲染中Select2使用watcher
- r - 在 R 中使用 as.numeric() 转换时出错
- c - C中的函数strtok()和混合变量类型
- c++ - 变量的声明与定义
- python - 并行数据处理:我想让 python 使用 GPU 进行数据处理?
- javascript - 在 RTL 情况下 mouseEvent 的 clientx 值会发生什么?
- javascript - 为什么我的 JavaScript 代码在使用 Browserify 后无法运行?