Если вы хотите обрабатывать только строки файлов, содержащие \ N, тогда опустите ! (восклицательный знак) знак из если состояние выписки. Это флаг НЕ.
Что ваше состояние в основном говорят прямо сейчас:
Если текущая строка текстового файла, содержащийся в строке переменной линия не содержит \ N затем сделать выполнение кода внутри если блок заявления.
IF операторы выполняются только при условии поставки условие булево верно. Применение! флаг в основном устанавливает условие на true, если поставленное условие равно NOT true. This может помочь вам больше.
Если вы хотите только те строки, которые содержат \ N, то ваш код должен выглядеть следующим образом:
if (line.contains("\\N")) {
//process line here
}
Если вы НЕ хотите обрабатывать эти строки файлов, которые содержат \ N то, что вы используете прямо сейчас должен работать просто отлично.
Что касается Вашего вопроса:
и тогда мы имеем NumberFormatException (он должен быть Int Value есть). Почему это происходит?
\ п (в нижнем регистре п), как правило, тег, который применяется в строке, чтобы заставить новую линию при обработке, если в верхнем регистре N используется он не делает этого. В общем, в большом количестве файлов CSV используется \ N, что означает NULL, а другие просто ничего не помещают, просто разделитель.Вам нужно будет посмотреть, что создает CSV-файл, чтобы найти фактическую причину по , почему, так как они могут использовать его для чего-то другого, но на данный момент вы можете считать его NULL. Целые переменные никогда не Null, то они будут рассматриваться как содержащие 0, по умолчанию, так что вы могли бы изменить свой код:
if (line.contains("\\N") { line = line.replace("\\N", "0"); }
Вы, однако, может также столкнуться \ N там, где должна быть строка, так что выше линии будет тебе нехорошо. Одним из решений будет обрабатывать \ N в содержимом каждого элемента массива (она должна быть там) после того, как вы разделили файл строку, например:
String csvFilePath = "MyCSVfile.txt"; // assuming file is in classpath
try (BufferedReader br = new BufferedReader(new FileReader("MyCSVfile.txt"))) {
int j = 0; //used as a counter
String line = "";
while ((line = br.readLine()) != null) {
j++; //increment counter
String[] data = line.split(",");
//if the ID value contains null then apply the counter (j) value.
int id = Integer.parseInt(data[0].replace("\\N",String.valueOf(j)));
String type = data[1].replace("\\N","");
String text = data[2].replace("\\N","");
int value1 = Integer.parseInt(data[3].replace("\\N","0"));
int value2 = Integer.parseInt(data[4].replace("\\N","0"));
int value3 = Integer.parseInt(data[5].replace("\\N","0"));
System.out.println("ID is:\t\t" + id + "\nData Type is:\t" + type +
"\nText is:\t" + text + "\nValue 1 is:\t" + value1 +
"\nValue 2 is:\t" + value2 + "\nValue 3 is:\t" +
value3 + "\n");
}
br.close();
}
catch (IOException ex) {
//however you want to handle exception
}
Это будет обрабатывать \ N тег независимо от того, где он встречается в любой из ваших строк в CSV-файлах.
* Мне нужно загрузить все строки и пропустить все, что не содержит \ N. * Вы имеете в виду те **, содержащие ** \ N, правильно? – shmosel
Пожалуйста, положите [mcve] – GhostCat
Пожалуйста, добавьте еще один код, который вы сделали, чтобы мы могли помочь вам с проблемой. – Joe