У меня есть это приложение, которое запрашивает у пользователя текстовый файл для ввода, из этого текстового файла, содержит строки целых чисел и текста. И оттуда он должен написать в другой текстовый файл result.txt. Прямо сейчас, поскольку я все еще новичок в IO
меня возникают проблемы с записью файла, хотя файл успешно создан. Приложение останавливается прямо на части после ввода пользователем имени текстового файла. Могли бы вы, ребята, мне помочь? Заранее спасибо!
import java.util.*;
import java.io.*;
class FileReadingExercise3 {
public static void main(String [] args)
{
Scanner userInput = new Scanner(System.in);
Scanner fileInput = null;
String a = null;
int sum = 0;
do
{
try
{
System.out.println("Please enter the name of a file or type QUIT to finish");
a = userInput.nextLine();
if(a.equals("QUIT"))
{
System.exit(0);
}
fileInput = new Scanner(new File(a));
}
catch(FileNotFoundException e)
{
System.out.println("Error " + a + " does not exist.");
}
}while(fileInput == null);
PrintWriter output = null;
try
{
output = new PrintWriter(new File("result.txt"));
}
catch(IOException g)
{
System.out.println("Error");
System.exit(0);
}
while(fileInput.hasNext())
{
if(fileInput.hasNextInt())
{
int num = fileInput.nextInt();
sum += num;
String str = Integer.toString(num);
output.println(str);
}
}
fileInput.close();
output.close();
}
}
Он застревает, потому что вам нужно вызвать метод next()
после вызова hasNext()
чтобы указатель hasNext()
к следующей строке вашего входного файла.
Также вы не используете sum
поэтому проверьте, нужна ли вам эта переменная.
Вот код, который работает:
public static void main(String[] args) throws FileNotFoundException {
Scanner userInput = new Scanner(System.in);
Scanner fileInput = null;
String a = null;
int sum = 0;
do {
try {
System.out
.println("Please enter the name of a file or type QUIT to finish");
a = userInput.nextLine();
if (a.equals("QUIT")) {
System.exit(0);
}
fileInput = new Scanner(new File(a));
} catch (FileNotFoundException e) {
System.out.println("Error " + a + " does not exist.");
}
} while (fileInput == null);
PrintWriter output = null;
try {
output = new PrintWriter(new File("result.txt"));
} catch (IOException g) {
System.out.println("Error");
System.exit(0);
}
while (fileInput.hasNext()) {
if (fileInput.hasNextInt()) {
int num = fileInput.nextInt();
sum += num;
String str = Integer.toString(num);
output.println(str);
} else {
fileInput.next();
}
}
fileInput.close();
output.close();
}
}
Обновление:
Согласно java doc для метода Scanner.hasNext():
Возвращает true, если этот сканер имеет другой токен на своем входе. Этот метод может блокироваться, ожидая ввода для сканирования. Сканер не продвигается мимо какого-либо входа.
Поэтому, чтобы перейти к следующей позиции, вам нужно вызвать метод next()
, иначе Сканер будет в том же положении, и программа застрянет в бесконечном цикле.
next()
после этого? о да, я понимаю, что переменная sum
не используется, но я буду использовать ее после этого, спасибо за напоминание. :)
new File("result.txt"));
дважды? б) вашwhile(fileInput.hasNext())
за которым следуетif(fileInput.hasNextInt())
выглядит хитроумно. Если while истинно, а if ложно, то бесконечный цикл?