我的程序会覆盖它正在写入的文件,但它不应该

时间:2013-09-25 10:25:46

标签: java file append overwrite

我有这个程序:

import java.util.*;
import java.io.*;
public class Oblig2 {

public static void main (String[] args) {
final Scanner input = new Scanner (System.in);
int menyvalg=0;
Meny menyen = new Meny();   
menyen.meny(); 
}
}   
//Selve menyen til programmet i en egen klasse.

class Meny {

PrintWriter fil;
Scanner input = new Scanner (System.in);    

public void meny() {
try{
    fil=new PrintWriter(new FileWriter("fugler.txt"));
} catch (IOException e) {
    System.out.println("Filen finnes ikke");
} 


int menyvalg=0;
int menykall=1; 
//Menyen vil her bli repetert helt til en taster inn 4 og endrer menykall til 0.
do{
    //Selve menyen vil bli repetert helt til brukeren velger en av menyens alternativer.
    do{
    System.out.println("====== Meny for registrering av fugleobservasjoner =====");

    System.out.println("\n1. Registrer en fugleobservasjon");
    System.out.println("2. Skriv ut alle fugleobservasjoner av en type");
    System.out.println("3. Skriv ut alle fugleobservasjoner på ett bestemt sted");
    System.out.println("4. Avslutt systemet");

    System.out.println("\nVennligst velg en aksjon: ");
    menyvalg = input.nextInt();

        } while(menyvalg < 1 || menyvalg > 4);

    switch (menyvalg){
    case 1: registrering();
    break;
    case 2:
    case 3:
        case 4:menykall=0;
        }
    }while(menykall>=1); 
  }

void registrering () {

System.out.println("Velkommen til registreringen av fugleobservasjoner.");
System.out.println("Begynner registreringen (Lagrer seg i filen fugler.txt): ");

    try { 
    fil = new PrintWriter(new FileWriter("fugler.txt", true));

    System.out.println("\nVennligst tast inn fugletypen: ");
        String fugletype = input.next();
        fil.write(fugletype + ","); 

    System.out.println("Tast inn fuglens kjonn (M/H/X): ");
    char fuglekjonn = input.next().charAt(0);
    fil.write(fuglekjonn + ",");

    System.out.println("Tast inn observasjonslokasjon: ");
    String lokasjon = input.next();
    fil.write(lokasjon + ",");

    System.out.println("Tast inn dato for observasjon (Som en string på formen mai2012): ");
    String dato = input.next();
    fil.write(dato);

    fil.close();
    }catch(Exception e){
    System.out.println("Åpning av fil feilet");
    }
  }
 }

当我运行它,然后通过案例1,这是一个脚本,用于将信息注册到名为fugler.txt的.txt文件中。问题在于,每当我注册一只新鸟时,我希望它在文件的末尾放置得很漂亮。但事实并非如此。它会覆盖整个文件。当我在文件打开结束时将其设置为true时,为什么会这样做呢?

3 个答案:

答案 0 :(得分:1)

删除程序中的以下行

try{
    fil=new PrintWriter(new FileWriter("fugler.txt"));
} catch (IOException e) {
    System.out.println("Filen finnes ikke");
} 

因为每次执行都会创建一个新文件。

答案 1 :(得分:0)

使用此构造函数with append parameter

答案 2 :(得分:0)

fil = new PrintWriter(new FileWriter("fugler.txt", true));

将其设为

fil = new PrintWriter(new FileWriter("fugler.txt", false));