Java扫描程序不通过整个文件
我正在用Java编写一个程序,我需要做的一件事是为最短路径问题创建一组每个有效位置。 这些位置是在.txt文件中定义的,该文件遵循严格的模式(每行一个条目,没有额外的空格),并且非常适合使用.nextLine获取数据。 我的问题是,241行文件(432)中的扫描仪停止工作3/4通过一个条目的方式,并不承认任何新行。
我的代码:
//initialize state space
private static Set<String> posible(String posLoc) throws FileNotFoundException {
Scanner s = new Scanner(new File(posLoc));
Set<String> result = new TreeSet<String>();
String availalbe;
while(s.hasNextLine()) {
availalbe = s.nextLine();
result.add(availalbe);
}
s.close();
return result;
}
数据
Shenlong Gundam
Altron Gundam
Tallgee[scanner stops reading here]se
Tallgeese II
Leo (Ground)
Leo (Space)
当然,“扫描仪停止阅读”不在数据中,我只是标记扫描仪停止阅读文件的位置。 这是3068字节的文件,但这不应该影响任何东西,因为在同一个程序中,使用几乎相同的代码,我正在读取编码路径的261行14KB .txt文件。 任何帮助,将不胜感激。
谢谢。
扫描仪读取文件时出现问题,但我不确定它是什么。 它错误地认为它到达文件结束时,可能是由于一些时髦的字符串编码。 尝试使用包装FileReader对象的BufferedReader对象。
例如,
private static Set<String> posible2(String posLoc) {
Set<String> result = new TreeSet<String>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(posLoc)));
String availalbe;
while((availalbe = br.readLine()) != null) {
result.add(availalbe);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
编辑
我试着将问题减少到最低限度,这足以引发问题:
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File(FILE_POS));
int count = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.printf("%3d: %s %n", count, line );
count++;
}
我用printf检查了Scanner对象:
System.out.printf("Str: %-35s size%5d; Has next line? %b%n", availalbe, result.size(), s.hasNextLine());
并表明它认为文件已经结束。 我正在逐步从数据中删除行以查看哪些行导致问题,但会将其留给您。
我遇到了同样的问题,这是我做的修复它的方法:
1.Saved the file I was reading from into UTF-8
2.Created new Scanner like below, specifying the encoding type:
Scanner scanner = new Scanner(new File("C:/IDSBRIEF/GuidData/"+sFileName),"UTF-8");
我遇到了同样的问题。 扫描仪不会读到文件的末尾,实际上停在一个字的中间。 我认为这是一个在扫描仪上设置了一些限制的问题,但我注意到了rfeak关于字符编码的评论。
我重新保存了我正在读入UTF-8
的.txt
,它解决了这个问题。 事实证明,记事本默认为ANSI。