Java 方法返回空字符串BufferedReader
我正在执行java代码Java 方法返回空字符串BufferedReader,java,readline,Java,Readline,我正在执行java代码readLine()方法从文本文件返回空字符串,即使文件中有文本 BufferedReader csv = new BufferedReader(new FileReader("D:/SentiWordNet_3.0.0/home/swn/www/admin/dump/senti.txt")); String line = ""; while((line = csv.readLine()) != null){
readLine()
方法从文本文件返回空字符串,即使文件中有文本
BufferedReader csv = new BufferedReader(new FileReader("D:/SentiWordNet_3.0.0/home/swn/www/admin/dump/senti.txt"));
String line = "";
while((line = csv.readLine()) != null){
String[] data = line.split("\t");
Double score = Double.parseDouble(data[2])-Double.parseDouble(data[3]);
}
调用split()
后,会引发异常Arrayindexoutofboundsexception
下面是文本文件。每行以“a”开头,后跟一个数字。代码能够检索到带有apocrine一词的行,但无法检索带有eccrine一词的行。当我在调试模式下运行时,line变量以空字符串的形式返回 00098529 0 0 0顶分泌腺(外分泌腺)产生分泌,其中部分分泌细胞随分泌释放;“母乳是一种顶泌分泌物” 00098736 0.25 0小汗腺(外分泌腺),产生透明的水性分泌物,但不释放部分分泌细胞;对调节体温很重要 一个00098933 0 0自流的(指水)上升到水面 内部静水压力下的表面;“自流井”;“自流压力”
是否应该使用其他构造从文本文件中读取行以下是从文件中读取数据的示例方法。
在这里,读取后,每行都添加到arraylist中,并返回arraylist
public ArrayList<String> fileRead(String fileName){
File f;
String s;
FileReader fr = null;
BufferedReader br = null;
ArrayList<String> sl = new ArrayList<String>();
try {
f = new File(fileName);
fr = new FileReader(f);
br = new BufferedReader(fr);
while((s=br.readLine())!=null){
sl.add(s);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(br!=null)
br.close();
if(fr!=null)
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sl;
}
public ArrayList fileRead(字符串文件名){
文件f;
字符串s;
FileReader fr=null;
BufferedReader br=null;
ArrayList sl=新的ArrayList();
试一试{
f=新文件(文件名);
fr=新文件读取器(f);
br=新的缓冲读取器(fr);
而((s=br.readLine())!=null){
sl.add(s);
}
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
试一试{
如果(br!=null)
br.close();
如果(fr!=null)
fr.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
返回sl;
}
尝试使用扫描仪:
Scanner in = new Scanner(new FileReader("filename.txt"));
while (in.hasNext()){
String str = in.next());
// Use it
}
要阅读每一行:
while ((thisLine = br.readLine()) != null) {
System.out.println(thisLine);
}
如果这不起作用,那么我假设您的文本文件有问题。关键是您错误地使用了BufferedReader,如果您像这样使用FileReader
new FileReader( filename )
这里的文件名是类似“/data/myfile.txt”的文件路径。ecplise或编译器不会给出编译错误或警告,但是,如果使用readLine(),这是一个致命错误,将导致从文件中不读取任何内容。
正确的方法如下:
BufferedReader csv = new BufferedReader(new FileReader( new File("filename") ) )
csv.readLine()
我试过你的文件,发现你的文件格式不对。您的文件格式如下:00098529 0 0每个字符串都用空格分隔,但不用制表符分隔,因此当您使用拆分(“\t”)时,将一无所获。给定您的文件格式,您应该使用split(“”),或者您应该通过用tab分隔每个字符串来更改文件格式,您可以在
BufferedReader的javadoc中看到以下内容
//Get scanner instance
Scanner scanner = new Scanner(new File("SampleCSVFile.csv"));
//Set the delimiter used in file
scanner.useDelimiter(",");
//Get all tokens and store them in some data structure
//I am just printing them
while (scanner.hasNext())
{
System.out.print(scanner.next() + "|");
}
//Do not forget to close the scanner
scanner.close();
读一行文字。一行被认为是由换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任意一个终止的
因此,如果文本包含换行符('\n')
,后跟回车符,BufferedReader
将返回空字符串。考虑以下字符串。
abc\n\rdef
如果您调用readLine()
三次,将返回“abc”
,“
,“def”
。不仅上面的字符串,下面的字符串也可能导致相同的结果
abc\n\ndef
abc\r\rdef
在文本文件中,它必须包含一个或多个这样的组合。或者,它可能在这些特殊字符之间包含空格。例如:
abc\n\t\ndef
abc\n\rdef
等等
这就是为什么你会得到一个空行
要解决此问题,可以检查while循环中的行是否为空
while ((line = csv.readLine()) != null) {
if(line.trim().isEmpty()){
continue;
}
//Your code
}
请发布有问题的文本文件,不要为您的问题编写“示例”代码;发布你的真实代码。文件中有空行吗?您确定filename
是真实文件吗?记住,如果你使用反斜杠,你必须逃脱them@PeterJaloveczki这似乎与当前问题没有重复。@doorknop将获得一个FileNotFoundException
,而不是一个空字符串。谢谢您的回答。这是行不通的。我猜这是我的文件,我必须处理,为什么给它一个-1的值;是的,我的朋友们。。。。我只是写了一个方法,从文件中读取数据并将其存储在一个数组中。我们的答案适合我的问题。它没有抛出任何错误,并且能够返回我所有的行。谢谢你的回复。我尝试了这种方法,但仍然存在错误。我尝试了您的文件,发现您的文件格式错误。您的文件格式如下:00098529 0 0每个字符串都用空格分隔,但不用制表符分隔,因此当您使用拆分(“\t”)时,将一无所获。给定您的文件格式,您应该使用split(“”)或者你应该改变你的文件格式,用tab分隔每个字符串。有没有一种方法我可以在这个网站上传我的文本文件,因为我不确定在这里复制它是否真的有用。你可以在问题中添加一个图像来显示你的数据格式,或者在代码区域中写入你的文件,这将保护你的文件格式。下面是一个简单的方法来测试错误来自文件格式或其他原因。1.创建一个包含00098529 0 0的文件,每个字符串被一个空格分隔。2.创建一个包含00098529 0 0 0的文件,每个字符串被tab分隔。为了方便起见,您可以使用记事本++(一种软件)查看您的文件