Всем доброго дня.
Спасибо, что заглянули на огонёк.
Пока не вникайте в код, возможно Вы сможете помочь и без него.
Проблема заключается в следующем.
У нас есть два файла: "One" и "Two". В One хранится итоговая таблица, куда нам надо произвести записи из файла Two.
Представим, что файл Two содержит данные как на Английском, так и на Русском языках.
Поскольку файл Two может быть достаточно большим, имеет смысл считывать данные из него не по байтам / символам, а - строками.
Для этого отлично подойдёт класс BufferedReader. Он особенно хорош тем, что при его использовании мы можем указать кодировку файла, из которого читаем данные.
Я хочу достать первые 8 символов (Наш ID) из каждой строки и записать в ArrayList<Integer>. Т.е.:
arr.add(Integer.parseInt(x.substring(0, 7)));
У меня есть текстовый файл FileName. Кодировка - UTF-8 (Выставил сам, вместо "ANSI"). В нём есть три строки:
12345678 123456789123456789123456789123 12345.00 1234
12345677 ZXCVBNM<AS ASDFGHJQ ERW ED 12312.15 21
12345679 ФПАРВТПРСОВТВРМТЫР РОАР 12212.33 9
Так или иначе - я получаю строку из которой выдираю первые 8 символов и... Дальше начинаются проблемы. Вот мы и подошли к сути.
Вторая и третья строки - преобразуются в Integer без проблем. Но первая - нет. Выскакивает "NumberFormatException".
Выскакивает из-за того, что перед "12345678" есть некий, невидимый символ, который нельзя преобразовать в Integer.
Если я буду проводить побайтовое чтение, то этим невидимым символом окажутся вот эти ребята: "".
В таком случае, конечно, я могу их пропустить и записать всё корректно.
Но, неужели нельзя обойти эти символы при использовании BufferedReader'a? Без разбора строки на байты и всего этого?
Буду благодарен за помощь и подсказки.
Спасибо.package com.javarush.task.task18.task1827;
/*
Прайсы
*/
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
//Получаем имя файла
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName = br.readLine();
br.close();
//Ищем самый большой ID в файле
ArrayList<Integer> arr = new ArrayList<Integer>();
String tmp = "";
br = new BufferedReader(new FileReader(fileName));
int id;
int max = 0;
while (br.ready()) {
id = Integer.parseInt(br.readLine().substring(0,8).trim());
if (id > max) max = id;
}
/* = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));
while ((tmp = br.readLine()) != null) {
System.out.println(Integer.parseInt(tmp.substring(0, 7).trim()));
}*/
/* String line;
try (
InputStream fis = new FileInputStream("the_file_name");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);
) {
while ((line = br.readLine()) != null) {
// Deal with the line
}
}*/
/* while ((tmp = br.readLine())) {
for (String x : br.readLine().split("\r\n")) {
System.out.println(x);
System.out.println(Integer.parseInt(x.substring(0, 9)));
int tmp1 = Integer.parseInt(x.substring(0, 9));
arr.add(tmp1);
}
}*/
/* System.out.println(arr);
System.out.println(tmp);*/
/* while (args[0] != null) {
}*/
}
} //C:\Users\Batuman\Desktop\FileName.txt