#java
#java
Вопрос:
Я хочу создать несколько пакетных сценариев, используя csv и txt-файл, и при запуске я получаю сообщение об ошибке. Я прокомментировал код, чтобы вы могли определить мои намерения из этих заметок. Я пишу здесь больше только потому, что бот требует, чтобы я продолжал писать больше объяснений, прежде чем я смогу опубликовать. Как только это красное текстовое поле исчезнет, я перестану писать, и вы сможете прекратить чтение. Я действительно надеюсь, что вы уже перестали читать, потому что это либо утомило бы меня, это точно. Я начинаю задаваться вопросом, может быть, мне следует начать новый абзац. Давайте посмотрим, поможет ли это.
У меня возникает ощущение, что, возможно, использование другого языка для этого было бы более подходящим, но мой опыт в основном ограничен Java, и я надеюсь улучшить этот язык, прежде чем двигаться дальше.
Исключение в потоке «main» java.util.NoSuchElementException: строка не найдена в java.util.Scanner.nextLine(Scanner.java: 1540) в printerscriptcreator.PrinterScriptCreator.main(PrinterScriptCreator.java:29)
public class PrinterScriptCreator {
public static void main(String[] args) throws FileNotFoundException {
File csvFile = new File("printers.csv");
File txtFile = new File("xeroxTemplate.txt");
Scanner csvScanner = new Scanner(csvFile);
csvScanner.useDelimiter(",");
Scanner txtScanner = new Scanner(txtFile);
try{
while(csvScanner.hasNext()){
//create file with name from first csv cell
File file = new File(csvScanner.next());
//create FileWriter to populate the newly created file
FileWriter fw = new FileWriter(file);
//create PrintWriter to communicate with FileWriter
PrintWriter pw = new PrintWriter(fw);
//copy first 7 lines from xeroxTemplate.txt
for(int i=0; i<7; i ){
pw.println(txtScanner.nextLine());
}
//copy the next three cells from CSV into new file
for(int i=0; i<3; i ){
pw.println(csvScanner.next());
}
//copy remaining lines from TXT to the new file
while(txtScanner.hasNextLine()){
pw.println(txtScanner.nextLine());
}
}
} catch (IOException ex) {
System.out.printf("ERROR: %sn", ex);
}
}
}
Комментарии:
1. Java отлично подходит для этого, нет необходимости использовать другой язык.
Ответ №1:
Я заметил, что вы проверяете hasNext()
один раз, а затем захватываете next()
три раза. Вероятно, вам следует поставить условие hasNext()
внутри цикла for.
while(csvScanner.hasNext()){
...
//copy the next three cells from CSV into new file
for(int i=0; i<3; i ){
pw.println(csvScanner.next());
}
Ответ №2:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at printerscriptcreator.PrinterScriptCreator.main(PrinterScriptCreator.java:29)
Это говорит о том, что произошло. Один из ваших сканеров пытался извлечь следующую строку, когда у него ее не было, поэтому он выдает это исключение.
Он сообщает вам PrinterScriptCreator.java:29. У меня нет номеров строк для вашей вставки, но проверьте строку 29. Что это за строка? Я предполагаю, что это так:
for(int i=0; i<7; i ){
pw.println(txtScanner.nextLine());
}
вы пытаетесь извлечь 7 строк, а их нет 7. Поэтому он выдает исключение.
Вы можете попробовать сделать что-то вроде
for(int i=0; i<7; i ){
if(txtScanner.hasNextLine()){
pw.println(txtScanner.nextLine());
}
}
Или вы можете попробовать использовать блок try-catch для его обработки. В любом случае, проверьте свои файлы и убедитесь, что в них есть правильные данные.
Комментарии:
1. Необходимо создать txtScanner в цикле while, чтобы он воссоздавался после каждого создания файла. В противном случае у него закончились строки.
Ответ №3:
Необходимо создать txtScanner в цикле while, чтобы он воссоздавался после каждого создания файла. В противном случае у него закончились строки.
Комментарии:
1. Это совсем не похоже на правильное решение. Вам не нужно этого делать. Воссоздание его также читает одни и те же строки снова и снова, верно? Как выглядят ваши входные данные?