我正在执行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){
String[] data = line.split("\t");
Double score = Double.parseDouble(data[2])-Double.parseDouble(data[3]);
}
调用split()
后,会抛出异常Arrayindexoutofboundsexception
下面是文本文件。每行以"a"
开头,后跟一个数字。代码能够使用单词apocrine检索行,但不能使用单词eccrine检索行。当我在调试模式下运行时,行变量返回为空字符串。
大汗腺#1(外分泌腺)产生分泌物,其中部分分泌细胞随分泌物释放; “母乳是一种大汗腺分泌物” 一个外分泌腺体#1(外分泌腺)产生明显的水分泌而不释放部分分泌细胞;对调节体温很重要 <000> a 00098933 0 0自流#1(水)上升到 内部静水压力下的表面; “一个自流井”; “自流压力”
我应该使用其他构造来读取文本文件中的行
答案 0 :(得分:1)
您可以在以下BufferedReader
中的readline()的javadoc中看到..
读取一行文字。一条线被认为是由换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。
因此,如果文本包含换行符('\n')
后跟回车符,则BufferedReader
将返回一个空字符串。请考虑遵循String。
ABC \ n \ rdef
如果您拨打"abc"
3次,这将返回""
,"def"
,readLine()
。不仅上面的String,以下String也可能导致相同的结果。
ABC \ n \ NDEF
ABC \ r \ rdef
在您的文本文件中,它必须包含一个或多个这些组合。或者它们可能在这些特殊字符之间包含whitespases
。例如:
ABC \ n \吨\ NDEF
abc \ n \ rdef
依旧......
这就是为什么你得到一个空行。
要解决此问题,您可以检查while-loop
中的行是否为空。
while ((line = csv.readLine()) != null) {
if(line.trim().isEmpty()){
continue;
}
//Your code
}
答案 1 :(得分:0)
尝试使用扫描仪:
Scanner in = new Scanner(new FileReader("filename.txt"));
while (in.hasNext()){
String str = in.next());
// Use it
}
答案 2 :(得分:0)
阅读每一行:
while ((thisLine = br.readLine()) != null) {
System.out.println(thisLine);
}
如果这不起作用,那么我认为你的文本文件有问题。
答案 3 :(得分:0)
//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();
答案 4 :(得分:-1)
以下是从文件中读取数据的示例方法。
在阅读完每个行后,将其添加到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;
}
答案 5 :(得分:-1)
关键是你错误地使用BufferedReader,如果你使用像
这样的FileReadernew FileReader( filename )
这里的文件名是“./data/myfile.txt”之类的文件路径。 ecplise或compilier不会给出编译错误或警告,但是,这是一个致命的错误,如果你随后使用readLine(),将导致从文件中读取任何内容。 这样的正确方法:
BufferedReader csv = new BufferedReader(new FileReader( new File("filename") ) )
csv.readLine()
我试过你的文件,发现你的文件格式错了。你的文件格式如下:a 00098529 0 0每个字符串用空格分隔但不是tab,所以当你使用split(“\ t”)时你什么也得不到。给定您的文件格式,您应该使用split(“”)或者您应该通过将每个字符串除以tab来更改文件格式