Я делаю несколько относительно простых операций ввода-вывода в Java. У меня есть файлы .txt, которые я читаю с помощью сканера, и файл .txt, который я записываю с помощью BufferedWriter. Затем другой сканер читает этот файл, а другой BufferedWriter затем создает другой файл .txt. Я предоставил приведенный ниже код на всякий случай, но я не знаю, поможет ли он слишком сильно, так как я не думаю, что здесь проблема с кодом. Код компилируется без ошибок, но он не делает то, что я ожидаю. По какой-то причине charReader будет читать только половину своего файла, затем hasNext () вернет false, даже если конец файла не достигнут. Это не большие текстовые файлы - файл statsReader - 34 КБ, а файл charReader - 29 КБ, что еще более странно, потому что statsReader отлично читает весь свой файл, и он больше! Кроме того, у меня есть этот код, заключенный в try / catch, я просто не включил его.
Из того, что я посмотрел в Интернете, это может произойти с очень большими файлами, но они очень маленькие, поэтому я довольно растерялся.
Моя ОС - Windows 7, 64-разрядная.
Scanner statsReader = new Scanner(statsFile);
BufferedWriter statsWriter = new BufferedWriter(new FileWriter(outputFile));
while (statsReader.hasNext()) {
statsWriter.write(statsReader.next());
name = statsReader.nextLine();
temp = statsReader.nextLine();
if (temp.contains("form")) {
name += " " + temp;
temp = statsReader.next();
}
statsWriter.write(name);
statsWriter.newLine();
statsWriter.write(temp);
if (! (temp = statsReader.next()).equals("-"))
statsWriter.write("/" + temp);
statsWriter.write("\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "\t");
statsWriter.write(statsReader.nextInt() + "");
statsWriter.newLine();
statsReader.nextInt();
}
Scanner charReader = new Scanner(charFile);
BufferedWriter codeWriter = new BufferedWriter(new FileWriter(codeFile));
while (charReader.hasNext()) {
color = charReader.next();
name = charReader.nextLine();
name = name.replaceAll("\t", "");
typing = pokeReader.next();
place = charReader.nextInt();
area = charReader.nextInt();
def = charReader.nextInt();
shape = charReader.nextInt();
size = charReader.nextInt();
spe = charReader.nextInt();
index = typing.indexOf('/');
if (index == -1) {
typeOne = determineType(typing);
typeTwo = '0';
}
else {
typeOne = determineType(typing.substring(0, index));
typeTwo = determineType(typing.substring(index+1, typing.length()));
}
}
SSCCE:
public class Tester {
public static void main(String[] args) {
File statsFile = new File("stats.txt");
File testFile = new File("test.txt");
try {
Scanner statsReader = new Scanner(statsFile);
BufferedWriter statsWriter = new BufferedWriter(new FileWriter(testFile));
while (statsReader.hasNext()) {
statsWriter.write(statsReader.nextLine());
statsWriter.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}