Java 如何使用文件读取器和字符数组拼凑字符串

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

在另一个类中编写了一个文件,现在我正试图将该文件拼凑成一个JLabel,因此我需要将文件中的名称转换为字符串。使用FileReader和char数组将每个字符分隔成一个数组,并放在JLabel中

我在
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);
}