下面的代码从文件'helpFile.txt'中读取,并检查由'#'表示的索引。 从文件读取的变量存储在整数c中,如果读取的字符为“#”,则将其与“#”进行比较,而不将整数转换为字符。我想知道比较是否有效,因为编译器没有显示任何错误。 此外,假设文件中的程序找到'#',并且紧跟在'#'之后的名为'topic'的字符串,并使用readLine()读取它。 'String info = br.readLine()'只是'主题'还是'#'+'主题'? 抱歉这么冗长的问题。非常感谢。
boolean helpOn(String what){
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
}
答案 0 :(得分:1)
我尝试了你的代码,它对我很好,我想你需要检查你的“helpFile.txt”。我用它了。
阿达德#你好
howareyou
这是我得到的结果。
我打印了你使用的所有三个变量。 c,主题,信息。 现在,因为你在阅读一个字符后使用readline(),你必须从“helpFile.txt”的下一行给出你的“信息”c:35
主题:你好
info:howareyou
info将包含主题之后的任何内容,因为您正在使用readline()函数,它将转到下一行。试试我的例子。
遇到“#”时,你的var
C将有“#”(35)。
然后
由于readline(); ,主题在“#”之后会有任何内容,直到行尾
然后
info将在主题后面有下一行。
如果您正确格式化helpFile.txt,这将正常工作
修改强>
我必须每次都指定完整的文件名
您正在使用eclipse,并且您将文件保存在“SRC”文件夹中。将它们保存在Project文件夹中。只有一个在SRC文件夹上方然后执行此操作。
br = new BufferedReader(new FileReader("helpFile.txt"));
它应该有用。
<强> EDIT2 强> 你不需要检查信息为空两次
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,它将自动退出循环。
<强> EDIT3 强>
我不想打印所有文本
当你使用#来标记块的开头时,你可以使用任何东西来标记它的结尾。例如
<强> helpFile.txt 强>
阿达德#你好
howareyou
$
此处的其他文字
等等等等等等。...
现在,您可以将while修改为:
while(!(info=br.readLine()).equals("$")){
pw.println("info"+info);
}
一旦获得“$”,循环就会退出,之后不会打印任何内容。
答案 1 :(得分:0)
你可能想要读取你正在使用的类的javadoc(BufferedReader),它可以找到here,但我认为将字符与==进行比较是可以的,因为char实际上是一种数字类型。但我建议你阅读更多关于enconding,因为我认为FileReader将使用默认的plataform编码来读取你的文件,这可能不是你的文件编码。告知文件的编码总是好的做法。 关于第二个问题,根据javadoc(再次),它将读取整行(不是从您读取char的点)。希望有所帮助,我是goona尝试稍后运行以查看结果