2

下面的代码从文件“helpFile.txt”中读取并检查由“#”表示的索引。从文件中读取的变量存储在整数 c 中,如果读取的字符是“#”,则与“#”进行比较,而不将整数转换为字符。我想知道比较是否有效,因为编译器没有显示任何错误。另外,假设程序在文件中找到了“#”,并且一个名为“topic”的字符串紧跟在“#”之后,并使用 readLine() 读取它。'String info = br.readLine()' 将只是 'topic' 还是 '#'+'topic'?抱歉问了这么长的问题。非常感谢帮助。

boolean helpOn(字符串什么){

    private BufferedReader br;
    private String info, topic;
    private static PrintWriter pw = new PrintWriter(System.out, true);
    int c;


        br = new BufferedReader(new FileReader("helpFile.txt"));

    try{
        do{
            //read characters until '#' is found
            c = br.read();


            if(***c=='#'***){   //check if the character is '#'
                pw.println(c);
                if((**topic=br.readLine()**).equalsIgnoreCase(what)){   //check if 'what' string is equal to 's' which is the string after '#'
                    while((info=br.readLine())!=null){  //print info until the end of info
                        if(info!=null)
                            pw.println(info);
                    }
                    return true;
                }
            }
        }
        while(c!=-1);
    }
    catch(IOException ex){
        pw.println("File error.");
        ex.printStackTrace();
        try{
            br.close();
        }
        catch(IOException e){
            pw.println("Error closing file.");
            e.printStackTrace();
        }
        return false;
    }

    try{
        br.close();
    }
    catch(IOException ex){
        pw.println("Error closing file.");
        ex.printStackTrace();
    }
    return false; //topic not found
}
4

2 回答 2

1

我试过你的代码,它对我来说很好,我想你需要检查你的“helpFile.txt”。我在里面使用了这个。

阿达#你好

你好吗

这就是我得到的结果。

c: 35

话题:你好

信息:你好

我打印了你使用的所有三个变量。c、主题、信息。现在,由于您在读取字符后使用 readline(),因此您必须在“helpFile.txt”中的下一行提供您的“信息”

info 将包含主题之后的任何内容,因为您正在使用 readline() 函数,它将转到下一行。试试我的例子。

一旦遇到“#”,你的 var

C 将有“#”(35)。

然后

由于readline(),主题将在“#”之后直到行尾有任何内容;

然后

info 将在主题后有下一行。

如果您正确格式化 helpFile.txt,这将正常工作

编辑

我每次都必须指定完整的文件名

您正在使用 eclipse,我猜您正在将文件保存在“SRC”文件夹中。将它们保存在您的项目文件夹中。就在 SRC 文件夹上方的一个,然后执行此操作。

br = new BufferedReader(new FileReader("helpFile.txt"));

它应该工作。

EDIT2 你不需要检查 null 的信息两次

while((info=br.readLine())!=null){
//print info until the end of
//  if(info!=null) noT needed, u alreay did that above
pw.println("info"+info);
             }

如果为NULL,它将自动跳出循环。

编辑3

我不想打印所有的文本

当您使用 # 标记块的开始时,您可以使用任何东西来标记它的结束。例如

帮助文件.txt

阿达#你好

你好吗

$

其他文字在这里

等等等等等等...

...

现在,您可以将 while 修改为:

while(!(info=br.readLine()).equals("$")){
      pw.println("info"+info);
                            }

循环将在获得“$”后立即退出,之后不会打印任何内容。

于 2012-04-22T06:21:47.813 回答
0

您可能想阅读您正在使用的类 (BufferedReader) 的 javadoc,它可以在此处找到,但我认为将字符与 == 进行比较是可以的,因为 char 实际上是一种数字类型。但是我建议您阅读有关编码的更多信息,因为我认为 FileReader 将使用默认平台编码来读取您的文件,而这可能不是您的文件编码。通知文件的编码始终是一种好习惯。关于第二个问题,根据 javadoc(再次),它将读取整行(而不是从您读取 char 的点开始)。希望对您有所帮助,我想稍后再运行它以查看结果

于 2012-04-22T06:24:15.360 回答