Java 如何使用文件读取器和字符数组拼凑字符串
在另一个类中编写了一个文件,现在我正试图将该文件拼凑成一个JLabel,因此我需要将文件中的名称转换为字符串。使用FileReader和char数组将每个字符分隔成一个数组,并放在JLabel中 我在Java 如何使用文件读取器和字符数组拼凑字符串,java,arrays,file,Java,Arrays,File,在另一个类中编写了一个文件,现在我正试图将该文件拼凑成一个JLabel,因此我需要将文件中的名称转换为字符串。使用FileReader和char数组将每个字符分隔成一个数组,并放在JLabel中 我在namepiews[x]=(char)nr上得到这个错误: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 at clients.initialize(clients
namepiews[x]=(char)nr上得到这个错误代码>:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at clients.initialize(clients.java:197)
at clients.<init>(clients.java:72)
不起作用最有可能的情况是,您的问题发生是因为名件
未初始化。正如评论中已经提到的,您不应该使用char[]
作为字符的容器(因为在现实世界中,您不会每次都知道文件内容的长度,因此可能需要调整容器的大小),使用Java标准库提供的StringBuilder
更好。它会保护你不出界
StringBuilder namePieces = new StringBuilder();
File file = new File(filePath);
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(file),
Charset.forName("UTF-8")));
int c;
while((c = reader.read()) != -1) {
namePieces.append((char) c);
}
String nameString = namePieces.toString(); // Use this string as a complete array of needed characters
正如您所见,我不仅使用了StringBuilder
,而且还使用了BufferedReader
,从而改变了一种方法。但是,对于您的任务,您可以将文件阅读器保持原样。只需考虑将字符追加到Builder中。 如果你的文件只包含一个字符串,有一个简单的方法来读取它:
public String readMyFile( String fileName) throws IOException {
Path path = Paths.get(fileName);
return Files.readAllLines(path).get(0);
}
我猜出现问题的原因是没有初始化namePieces。您的错误表明namePieces
数组为空。在您发布的代码中,我找不到您在何处定义和初始化名称。请发布并添加名称的定义
。不要使用字符[]
:当您读取越来越多的数据时,无法调整其大小。使用StringBuilder
,这正是它的用途。
public String readMyFile( String fileName) throws IOException {
Path path = Paths.get(fileName);
return Files.readAllLines(path).get(0);
}