Как собрать String, используя читатель файла и массив символов - PullRequest
0 голосов
/ 10 января 2020

Написал файл в другом классе, и теперь я пытаюсь собрать файл в JLabel, поэтому мне нужно преобразовать имя файла в строку. Использование FileReader и массива char для разделения каждого символа в массив для объединения в JLabel.

Я получаю эту ошибку на NamePieces[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)

Это код, который я хочу прочитать в файле:

try(FileReader nameReader = new FileReader(NamePath)) {
        int nr = nameReader.read();
        int x = 0;
        while(nr != -1) {
            namePieces[x] = (char)nr;
            nr = nameReader.read();
            x++;
        }
    } 
    catch (FileNotFoundException e) {}
    catch (IOException e1) {}

    String name = String.valueOf(namePieces[0]) + namePieces[1];

Не работа

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Если ваш файл содержит только строку, есть простой способ прочитать ее:

public String readMyFile( String fileName) throws IOException {

    Path path = Paths.get(fileName);

    return Files.readAllLines(path).get(0);
}
0 голосов
/ 10 января 2020

Скорее всего, ваша проблема возникает из-за того, что namePieces не инициализирован. Как уже упоминалось в комментариях, вы не должны использовать char[] в качестве контейнера для ваших символов (потому что в реальном мире вы не будете каждый раз знать длину содержимого файлов, поэтому вам, вероятно, потребуется изменить размер своего контейнера ), лучше использовать StringBuilder, предоставляемый стандартной библиотекой Java. Это защитит вас от выхода за пределы.

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. Тем не менее, для вашей задачи вы можете оставить FileReader как есть. Просто подумайте о добавлении символов в конструктор.

...