编辑1:更新了我的方法。我觉得它有帮助......我不能确定,直到我以后可以测试它。
编辑2:恢复到之前的版本,以显示从原始版本到答案的更改。
这是一个更大问题的一部分,我正试图将我的程序分发给其他计算机。我有一个方法,它将文件(特别是一个XML文件,但我认为这是不相关的)读入String
。这是一个GUI应用程序,因此用户选择一个文件,并通过此方法读取该文件。我也使用这种方法来读取资源,这就是为catch
提供FileNotFoundException
的原因。如果它被捕获,那么它会尝试将其作为资源读取。如果这不起作用那么太糟糕了我猜...哈哈。
所以我正在尝试4种不同的方式:
据我所知,最后一种情况发生的情况是由于某种原因fileScanner.hasNext()
在循环的第一个循环中返回false,因此没有任何内容附加到fileString。我只是不知道是什么会导致它这样做!任何帮助,将不胜感激! (注意,没有抛出任何错误,就计算机而言,这一切都“正常”)。
这是我的方法。任何改善它的帮助也会受到赞赏!
/**
* This method reads a file into a string. If you have an file in the resources folder for example, you can say
* "/resources/exampleFile.txt".
*
* @param location location of the resource in the resources folder
* @return String of the file
*/
public static String fileToString(String location) throws FileNotFoundException {
Scanner fileScanner;
try {
InputStream is = StaticClass.class.getResourceAsStream(location);
fileScanner = new Scanner(is);
} catch (NullPointerException e) {
fileScanner = new Scanner(new File(location));
}
StringBuilder fileString = new StringBuilder();
while (fileScanner.hasNext()) {
fileString.append(fileScanner.nextLine()).append(newline);
}
return fileString.toString();
}
答案 0 :(得分:0)
我仍然不确定原因,但我认为这与扫描仪有关。由于某种原因,它不能正常工作,但我只是将其更改为以下代码:
/**
* Takes the file and returns it in a string
*
* @param location
* @return
* @throws IOException
*/
public static String fileToString(String location) throws IOException {
FileReader fr = new FileReader(new File(location));
return readerToString(fr);
}
/**
* Takes the given resource (based on the given class) and returns that as a string.
*
* @param location
* @param c
* @return
*/
public static String resourceToString(String location, Class c) throws IOException {
InputStream is = c.getResourceAsStream(location);
InputStreamReader r = new InputStreamReader(is);
return readerToString(r);
}
/**
* Returns all the lines in the scanner's stream as a String
*
* @param r
* @return
* @throws IOException
*/
public static String readerToString(InputStreamReader r) throws IOException {
StringWriter sw = new StringWriter();
char[] buf = new char[1024];
int len;
while ((len = r.read(buf)) > 0) {
sw.write(buf, 0, len);
}
r.close();
sw.close();
return sw.toString();
}
最大的变化是使用FileReaders和StringWriters而不是Scanners。我还分离了我的resourceToString和fileToString方法。无论如何,我认为这更好。所以,无论如何,你去!我希望这有助于将来的某个人!