创建一个程序,将数组列表中的数据写入文本文件,即使该文件存在,我也遇到此FileNotFoundException
。同时,我的数组中的计算数据不会写入它。
这是我的代码:
public static void payrollReadFromFile(String filename) {
// initializes br identifer as BufferedReader.
BufferedReader br = null;
payrolls.clear(); // removes all elements in arraylist employees
try {
br = new BufferedReader(new FileReader("payroll.txt"));
try {
String name;
double gincome, nincome, deduc, sss, pagibig,
phil = 0; // initialize identifiers
// reads each line through br identifier, and
stores it on
// temporary identifiers
// loop continues until null is encountered
while ((name = br.readLine()) != null) {
gincome = Double.parseDouble(br.readLine());
sss = Double.parseDouble(br.readLine());
pagibig =
Double.parseDouble(br.readLine());
phil = Double.parseDouble(br.readLine());
deduc = Double.parseDouble(br.readLine());
nincome =
Double.parseDouble(br.readLine());
// adds the data to payroll arraylist
payrolls.add(new Person( name, gincome,
sss, pagibig, phil,deduc, nincome));
}
} finally {
br.close(); // closes BufferedReader
}
} catch (IOException e) {
e.printStackTrace();
}
}
// method which writes data into parameter 'filename'
// uses PrintWriter and FileWriter
public static boolean payrollWriteToFile(String filename) {
boolean saved = false;
PrintWriter pw = null; // pw is a PrintWriter identifier
try {
// instantiate pw as PrintWriter, FileWriter
pw = new PrintWriter(new FileWriter("payroll.txt"));
try {
// for each loop. each data from payrolls is
written to parameter
for (Person payroll : payrolls) {
pw.println(payroll.getName());
pw.println(payroll.getGincome());
pw.println(payroll.getSss());
pw.println(payroll.getPagibig());
pw.println(payroll.getPhil());
pw.println(payroll.getDeduc());
pw.println(payroll.getNincome());
}
saved = true;
} finally {
pw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return saved;
}
答案 0 :(得分:1)
你的文件公开声明:
br = new BufferedReader(new FileReader("payroll.txt"));
未使用您传递给方法的变量filename。
你需要:
br = new BufferedReader(new FileReader(filename));
您可能还想使用File对象。
答案 1 :(得分:0)
当我接受你的代码并稍微修改它时,这很有效。确保使用传递给您的方法的参数filename
,现在您正在方法中对其进行硬编码。
File file = new File(filename);
if (!file.exists()) file.createNewFile();
br = new BufferedReader(new FileReader(file));
答案 2 :(得分:0)
您可能需要确保文件位于正确的位置。路径相对于.class
文件的位置。例如,“payroll.txt
”表示“C:\path\to\class\file\payroll.txt
”。
此外,请重新配置BufferedReader
以使用filename
参数,正如其他人指出的那样。
不要只是在程序中创建文件;这只是掩盖问题,这是一个存储在错误位置的文件。您可以使用它进行测试以找到文件的位置,然后删除该行,然后放置您需要在那里使用的文件。