我试着读取配置文件和字符串文件。配置文件将用于确定字符串文件中的内容是否正确。
我创建了一个名为StringAcceptor的包,部分代码如下: public static boolean isAccepted(File config, File lines_file, String string) throws Exception {
//BufferedReader para obtener las líneas del archivo
conf = new BufferedReader(new FileReader(config));
//BufferedReader para determinar la cantidad de líneas en el archivo
lines = new BufferedReader(new FileReader(lines_file));
//Validación de archivo de configuración del AFD
while(lines.ready()){
lines.readLine();
line_number = line_number + 1;
}
while(conf.ready()){
try{
这里我开始阅读行并将值分配给相应的变量
然后我创建了一个java文件来使用该包并将信息发送到我的StringAcceptor以确定该字符串是否被接受。使用该包的类中的代码如下所示。导入所需的包并确定选项后,它会优先选择以下任一选项:
case 1:
System.out.print("\nInsert configuration file name: ");
path = br.readLine();
archivo = new File(path);
if(archivo.isFile()){
System.out.print("\nInsert string to be verified: ");
String string = br.readLine();
if(StringAcceptor.isAccepted(archivo, archivo, string)){
System.out.println("\nAccepted!\n");
} else{
System.out.println("\nNot accepted.\n");
}
} else {
System.out.println("\nFile does not exist.\n");
}
break;
case 2:
System.out.print("\nInsert configuration file name: ");
path = br.readLine();
archivo = new File(path);
if(archivo.isFile()){
System.out.print("\nInsert name of string file to be verified: ");
String string = br.readLine();
strings = new File(string);
if(strings.isFile()){
BufferedReader sfile = new BufferedReader(new FileReader(strings));
while(sfile.ready()){
if(StringAcceptor.isAccepted(archivo, archivo, sfile.readLine())){
System.out.println("\nAccepted!\n");
} else {
System.out.println("\nNot Accepted.\n");
}
}
} else{
System.out.println("\nFile does not exist.\n");
}
} else {
System.out.println("\nFile does not exist.\n");
}
//archivo.delete();
break;
case 3:
exit = true;
break;
default:
System.out.println("\nInvalid Option.\n");
每当我执行我的代码时,它将显示以下菜单:
1)验证字符串 2)验证字符串文件 3)退出 插入选项:
现在,无论我先选择哪个选项,或者我先使用哪个配置文件,它只会在第一次正确执行时,每次之后它都不会进入while(conf.ready())
条件,永远不会阅读这些行,因此会一直返回false
。
希望我的编辑让它更容易理解。
答案 0 :(得分:0)
摆脱所有ready()
测试。将其用作流结束的测试无效。这不是它的用途。见Javadoc。只需阅读readLine()
返回null:
while ((line = in.readLine()) != null)
答案 1 :(得分:0)
好的,所以我发现了我完全陷入困境的地方。我非常专注于我正在阅读的文件,我确信这是问题所在。问题结果是我没有初始化为0 int
“控制变量”我正在使用的for
周期中的一些,所以我最终阅读的内容比我应该的更多在每个for
中,因为我一直在添加变量的最后一个值(好奇,它没有向我显示异常)。
仍然,感谢大家的帮助,如果我没有用你的建议改变我的代码,我就永远不会知道发生了什么。
答案 2 :(得分:-1)
您应该删除ready
方法。使用BufferedReader
进行阅读时,请使用readLine
方法检查数据是否可用,然后继续。
同时在阅读文件时,我看不到关闭流的代码。对于例如下面的语句打开文件进行阅读
BufferedReader sfile = new BufferedReader(new FileReader(strings));
但是对sfile.close()
的调用在哪里。同样,isAccepted方法也打开文件流,而不是关闭它。
你最好使用