Java删除我的文件并创建一个新文件

时间:2014-09-16 00:29:33

标签: java file file-io

我正在尝试完成银行帐户的家庭作业。我有一个文本文件,“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;
}

运行程序后,除非我调用写入文件的方法,否则文件的所有内容都将消失。

2 个答案:

答案 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以这种方式编写和/或读取文件,而不是使用PrintWriterRandomAccessFile

RandomAccessFile myFile = new RandomAccessFile("/path/to/my/file", "rw");

通过这种方式,文件会自动创建,如果它不存在,如果存在,则只打开它。