BufferedReader 只读取一次
BufferedReader reads only once
我正在尝试读取一个配置文件和一个字符串文件。配置文件将用于判断字符串文件中的内容是否正确。
我创建了一个名为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 以确定字符串是否被接受。使用该包的 class 中的代码如下。在导入所需的包并确定选项后,它会执行以下任一选项:
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())
条件,永远不会阅读这些台词,并将始终 return false
因为它。
希望我的编辑让它更容易理解。
您应该删除 ready
方法。使用 BufferedReader
读取时使用 readLine
方法检查数据是否可用,然后继续。
此外,在您阅读文件时,我没有看到关闭流的代码。例如下面的语句打开文件进行读取
BufferedReader sfile = new BufferedReader(new FileReader(strings));
但是sfile.close()
的调用在哪里呢?同样,isAccepted 方法也在打开文件流,但根本没有关闭它。
你最好使用
- 尝试使用资源(如果使用 Java 7+)
- Try/Finally
删除所有 ready()
测试。将其用作流结束的测试是无效的。这不是它的目的。请参阅Javadoc。一直读到 readLine()
returns null:
while ((line = in.readLine()) != null)
好的,所以我发现我完全搞砸了。我非常专注于我正在阅读的文件,我确信那是问题所在。问题原来是我没有将 int
"control variables" 中的一些 int
"control variables" 初始化为 0 我在我的 for
周期中使用了一些,所以我最终阅读的内容比我想象的要多在每个 for
中,因为我一直添加到变量的最后一个值(好奇它没有向我显示此异常)。
仍然感谢大家的帮助,如果我没有根据您的建议更改我的代码,我永远不会发现发生了什么。
我正在尝试读取一个配置文件和一个字符串文件。配置文件将用于判断字符串文件中的内容是否正确。
我创建了一个名为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 以确定字符串是否被接受。使用该包的 class 中的代码如下。在导入所需的包并确定选项后,它会执行以下任一选项:
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())
条件,永远不会阅读这些台词,并将始终 return false
因为它。
希望我的编辑让它更容易理解。
您应该删除 ready
方法。使用 BufferedReader
读取时使用 readLine
方法检查数据是否可用,然后继续。
此外,在您阅读文件时,我没有看到关闭流的代码。例如下面的语句打开文件进行读取
BufferedReader sfile = new BufferedReader(new FileReader(strings));
但是sfile.close()
的调用在哪里呢?同样,isAccepted 方法也在打开文件流,但根本没有关闭它。
你最好使用
- 尝试使用资源(如果使用 Java 7+)
- Try/Finally
删除所有 ready()
测试。将其用作流结束的测试是无效的。这不是它的目的。请参阅Javadoc。一直读到 readLine()
returns null:
while ((line = in.readLine()) != null)
好的,所以我发现我完全搞砸了。我非常专注于我正在阅读的文件,我确信那是问题所在。问题原来是我没有将 int
"control variables" 中的一些 int
"control variables" 初始化为 0 我在我的 for
周期中使用了一些,所以我最终阅读的内容比我想象的要多在每个 for
中,因为我一直添加到变量的最后一个值(好奇它没有向我显示此异常)。
仍然感谢大家的帮助,如果我没有根据您的建议更改我的代码,我永远不会发现发生了什么。