首页 > 解决方案 > Java 编译器没有事先检查 IF ELSE 条件(或者至少我认为这是正在发生的事情......)

问题描述

我有一个名为File.java的简单类文件,其中包含 3 个函数:createFilewriteContent和作为驱动程序的强制性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();
        }
    }

我确信我只是对一些基本而简单的事情感到迟钝——你介意在这里给我一个提示吗?

标签: javaif-statement

解决方案


改变这个:

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));
}

如果您在大括号 {} 内创建变量,则其范围仅限于它们。因此,您应该创建writeroutside if,因为您稍后会使用它。


推荐阅读