Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用扫描仪读取文件,无法进入循环_Java_File_Text - Fatal编程技术网

Java 无法使用扫描仪读取文件,无法进入循环

Java 无法使用扫描仪读取文件,无法进入循环,java,file,text,Java,File,Text,我试图读取一个文本文件,以便将它的某些部分复制到一个新的文本文件中 以下是我创建扫描仪项目的方式: // folder File vMainFolder = new File(System.getProperty("user.home"),"LightDic"); if (!vMainFolder.exists() & !vMainFolder.mkdirs()) { System.out.println("Missing LightDic folder."); return;

我试图读取一个文本文件,以便将它的某些部分复制到一个新的文本文件中

以下是我创建扫描仪项目的方式:

// folder
File vMainFolder = new File(System.getProperty("user.home"),"LightDic");
if (!vMainFolder.exists() & !vMainFolder.mkdirs()) {
  System.out.println("Missing LightDic folder.");
  return;
}

// file
System.out.println("Enter the source file's name : ");
Scanner vSc = new Scanner(System.in);
String vNomSource = vSc.next();

Scanner vSource;
try {
  vSource = new Scanner(new File(vMainFolder, vNomSource+".txt"));
} catch (final java.io.FileNotFoundException pExp) {
  System.out.println("Dictionnary not found.");
  return;
}
我就是这样写我的while结构的:

while (vSource.hasNextLine()) {
  System.out.println("test : entering the loop");
  String vMot = vSource.nextLine(); /* edit : I added this statement, which I've forgotten in my previous post */
}
执行程序时,它从不打印“测试:进入循环”

当然,我正在测试的这个文件不是空的,它是这样一个单词列表:

a
à
abaissa
abaissable
abaissables
abaissai
我不明白我做错了什么,过去我用过几次这种方法。

问题解决了

我真的不知道为什么,但我解决了将我的
FRdic.txt
文件的编码从
ANSI
更改为
UTF-8
的问题,然后读取了该文件

感谢所有试图帮助我的人


JVM不读取
ANSI
中编码的文本文件是否正常?

文件名是什么?它在
~/LightDic/
目录中吗?你看到它输出的东西了吗?什么是
System.out.println(新文件(vMainFolder,vnosource+“.txt”).getAbsolutePath()为您打印?不相关,但您是否在Java代码中使用类似的内容?我想知道变量开头的v是什么意思,我猜它代表变量。无论如何,在Java中使用这种表示法并不常见,它只会使可读性变得更差,而(vSource.hasnetline()){…}将生成一个无限循环。每次通过循环时,您都需要实际使用一些文本来推进扫描仪的指针。我想你已经确认你进入了while循环,对吧?所以问题是,为什么vSource.hasNextLine()会阻塞或返回false?最明显的可能性是vMainFolder没有指向您认为的位置。我建议您使用System.out.println(新文件(vMainFolder,vNomSource+“.txt”).getAbsolutePath();正如jlordo所建议的,在进入while循环之前,Java默认使用Unicode。如果您的
ANSI
文件不符合这两种字符编码的公共片段,那么将其作为Unicode读取可能会导致JVM将换行符作为另一个字符的第二个字节
java.io.InputStreamReader
提供了显式设置字符编码的方法。