我已经开始学习 Java,并且遇到了一个应该将一些内容写入numbers.dat
文件的简单程序的问题。
我面临两个问题:
我得到的输出如下:
2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992, 1056, 1122, 1190, 1260, 1332, 1406, 1482, 1560, 1640, 1722, 1806, 1892, 1980, 2070, 35562, 2450, 24556, 2 ..
什么时候应该:
对于偶数:
2,4,6,8,10,12,14,……,98,100
对于奇数:
2,4,6,8,10,12,14,……,98,100,1,3,5,7,9,……..97,99
我的第二个问题是输出没有写入
numbers.dat
文件!都是空白。
我试图解决的书中的问题是:
编写一个名为 TextFileIO.java 的程序来创建一个名为 numbers.dat 的文件。然后创建一个算法,写入从 1 到 100 的所有偶数整数,用逗号分隔。
创建文件后,关闭并重新打开文件并将结果显示在屏幕上。显示结果后,将 1 到 100 的奇数整数附加到文件末尾,用逗号分隔。重新打开文件并显示结果。文件的内容应该是从 1 到 100 的偶数,用逗号分隔,然后是从 1 到 100 的奇数,用逗号分隔。该程序的输出将类似于以下内容:
2,4,6,8,10,12,14,……,98,100
2,4,6,8,10,12,14,……,98,100,1,3,5,7,9,……..97,99
以下是我到目前为止尝试过的代码:
文本文件IO.java
package package1;
import java.io.*;
import java.util.*;
//class definition
public class textFileIO{
//The main function
public static void main(String args[]) {
//This declares a file to open.
File outFile = new File("numbers.dat");
int sumEven = 0;
int sumOdd = 0;
//File IO requires a try/catch block to prevent the program from crashing
try {
//a buffered writer is used to allow us to write to the file.
BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));
//This for loop handles adding all of the numbers together
for(int i = 1; i < 100; i += 2) {
sumEven += i + 1;
writer.write("" + sumEven + ", ");
}
//adding a new line and closing the file
writer.newLine();
writer.close();
//A buffered Reader is used for reading a new file.
BufferedReader reader = new BufferedReader(new FileReader(outFile));
//Because I only add a new line at the end, I only need to read the first line.
System.out.println(reader.readLine());
//I need to write again, so I close the reader and open the writer.
reader.close();
//you need to create another object to append to the file
//writer.open();
BufferedWriter writer2 = new BufferedWriter(new FileWriter(outFile));
//This for loop is identical to the previous one, except for odd numbers
for(int i = 1; i < 100; i += 2) {
sumOdd += i;
writer2.write("" + sumOdd + ", ");
}
writer.newLine();
writer.close();
//The same here. You need to create another reader
//reader.open();
BufferedReader reader2 = new BufferedReader(new FileReader(outFile));
System.out.println(reader2.readLine());
}
catch (Exception e) {
}
}
}
编辑 2
我更改了我的代码,这是我最新的代码。我仍然有问题。控制台输出屏幕显示 49 和 50 作为输出,我的 numbers.dat 文件现在仅显示逗号分隔的奇数列表。我现在做错了什么?
import java.io.*;
import java.util.*;
public class TextFileIO {
public static void main(String[] args) throws Exception {
//Clear the contents of numbers.dat if already exists and populated
File fileOne = new File("numbers.dat");
fileOne.delete();
File newFile = new File("numbers.dat");
newFile.createNewFile();
//Create writer object
PrintWriter writer = new PrintWriter(new FileWriter("numbers.dat"));
//Loop from 1 to 100
for (int i = 1; i <= 100; i++) {
//If number is even, write to file
if (i % 2 == 0) {
writer.print(i + ",");
}
}
//Close writer object.
writer.close();
//Read from file
FileInputStream fileStream = new FileInputStream("numbers.dat");
DataInputStream in = new DataInputStream(fileStream);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//Print line
System.out.println(reader.read());
reader.close();
//Write all odd numbers to file
PrintWriter writer2 = new PrintWriter(new FileWriter("numbers.dat"));
//Loop from 1 to 100
for (int i = 1; i <= 100; i++) {
//If number is odd, write to file
if (i % 2 == 1) {
writer2.print(i + ",");
}
}
writer2.close();
//Read from file
FileInputStream fileStream2 = new FileInputStream("numbers.dat");
DataInputStream in2 = new DataInputStream(fileStream2);
BufferedReader reader2 = new BufferedReader(new InputStreamReader(in2));
//Print line
System.out.println(reader2.read());
reader.close();
}
}
编辑 3:我仍然无法获得所需的输出。我仍然在控制台中得到 49 和 50 的输出,在 numbers.dat 文件中,输出仍然只是用逗号分隔的奇数。我无法理解我的代码到底要改变什么。