我正在尝试完成银行帐户的家庭作业。我有一个文本文件,“BankAccounts.txt”,如果没有该名称的文件,则会创建该文件。但是,如果文件存在,我不会创建它。但是Java希望删除我内部的所有代码:(。你能帮我确定一下为什么会这样吗?谢谢< 3
代码:
static Scanner keyboard = new Scanner(System.in);
static File file;
static PrintWriter Vonnegut; //a great writer
static FileReader Max;
static BufferedReader Maxwell;
public static void main(String[] args) {
initialize();
}
static void initialize(){
try { // creating banking file
file = new File("src/BankAccounts.txt");
if(!file.isFile()) {file.createNewFile();} //if it doesn't exist, create it
Vonnegut = new PrintWriter("src/BankAccounts.txt","UTF-8");
Max = new FileReader("src/BankAccounts.txt");
Maxwell = new BufferedReader(Max);
//get list of usernames and passwords for later
usernames = new String[countLines() / 5];
passwords = new String[usernames.length];
checkingAccounts = new String[usernames.length];
savingsAccounts = new String[usernames.length];
} catch (IOException e) {
e.printStackTrace();
}
}
此方法不断返回0 ...无论我的文件中是否包含数据。
static int countLines() throws IOException {
BufferedReader Kerouac = new BufferedReader(Max);
int lines = 0;
while(Kerouac.readLine() != null)
lines++;
Kerouac.close();
System.out.println(lines);
return lines;
}
运行程序后,除非我调用写入文件的方法,否则文件的所有内容都将消失。
答案 0 :(得分:2)
if(!file.isFile()) {file.createNewFile();} //if it doesn't exist, create it
冗余。删除。
Vonnegut = new PrintWriter("src/BankAccounts.txt","UTF-8");
这总是会创建一个新文件,这就是前一行冗余的原因。如果要在文件已存在时附加到该文件:
Vonnegut = new PrintWriter(new FileOutputStream("src/BankAccounts.txt", true),"UTF-8");
true
参数告诉FileOutputStream
附加到文件。
参见Javadoc。
或使用FileWriter
代替FileOutputStream,
相同的原则。
答案 1 :(得分:1)
当您创建PrintWriter
时,它将始终从javadoc中删除该文件(如果该文件已存在):
...如果文件存在,那么它将被截断为零大小......
(即其内容将被删除)
您需要使用FileReader
以这种方式编写和/或读取文件,而不是使用PrintWriter
和RandomAccessFile
:
RandomAccessFile myFile = new RandomAccessFile("/path/to/my/file", "rw");
通过这种方式,文件会自动创建,如果它不存在,如果存在,则只打开它。