简体   繁体   中英

overwriting a file in java using FileWriter

I have to accomplish a task of writing a set of data to file, use it, then overwrite it with new data. Thus overwrite of the file takes place repeatedly.I know i can accomplish the above by creating FileWriter object each time with the option to overwrite like below

     FileWriter object = new FileWriter("fileName", false)

and close it to write to the file.

If i am supposed to overwrite the file n number of times , according to the above method i need to create n number of FileWriter objects. Is there any efficient way to overwrite a file repeatedly by only creating a single FileWriter object?

Not a direct answer, but anyway.

DON'T DO THAT!

What do you think will happen if for some reason writing the new data to the file fails ?

You not only lose your original file, but also the new file contents...

Write the new content to another file , ensure that it is well written and closed, and then rename the new file atomically to the original file.

PS: and do not forget to correctly .close() .

PS2: if you use Java 7, use the new Files API.

Its better to make a temp file and then rename the tempfile and delete the old like here:

    public static void nachtragenTRA(File files) throws IOException{

    Scanner sc=null;
        File f= files;
        String analyse = "";
        String NTausgabe = "";
        int max = 0;
        int k = 0;
        String updatedLine[] = new String [4];
        int filenr = 1;
        boolean sucess = false;

        try{
            sc= new Scanner(f);
        }catch(FileNotFoundException x){
            System.out.println("Error: File not found!");
        }
        while (sc.hasNextLine()){                                       //get next line

            analyse = sc.nextLine();

            max = analyse.length();                             //get line lenght

            StringBuffer sb = new StringBuffer(analyse);        //write analyse in StringBuffer 
                                                                //to change the string

            if(k == 1)
            {
                sb.replace(Daten.NTdatapos[3],max, Daten.NTProbentypTextfield.getText());
                updatedLine[0] =String.valueOf(sb);
            }
            else if(k == 2)
            {
                sb.replace(Daten.NTdatapos[4],max, Daten.NTPrueferTextfield.getText());
                updatedLine[1] =String.valueOf(sb);
            }
            else if(k == 3)
            {
                sb.replace(Daten.NTdatapos[5],max, Daten.NTKundeTextfield.getText());
                updatedLine[2] =String.valueOf(sb);
            }
            else if(k == 4)
            {
                sb.replace(Daten.NTdatapos[5],max, Daten.NTWerkstoffTextfield.getText());
                updatedLine[3] =String.valueOf(sb);
            }   

            if(k>3)
            {
                break;
            }

            k++;
        }
        sc.close();


        //NTausgabe=DatenTextarea.getText()+"\n"+updatedLine[0]+"\n"+updatedLine[1];
        //DatenTextarea.setText(String.valueOf(NTausgabe));

        //NTausgabe=DatenTextarea.getText()+"\n"+NTKundeTextfield.getText()+"\n"+NTPrueferTextfield.getText();
        //DatenTextarea.setText(String.valueOf(NTausgabe));


        //create tmp file with the new data
        PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(String.valueOf(f)+".tmp")));
        BufferedReader br = null;
        FileReader reader = null;

        try {
            reader = new FileReader(String.valueOf(f));
            br = new BufferedReader(reader);
            String line;

                while ((line = br.readLine()) != null)
                {
                    //Change speciffic lines
                    if(filenr == 2)
                    {
                        writer.println(updatedLine[0]);
                    }
                    else if(filenr == 3)
                    {
                        writer.println(updatedLine[1]);
                    }
                    else if(filenr == 4)
                    {
                        writer.println(updatedLine[2]);
                    }
                    else if(filenr == 5)
                    {
                        writer.println(updatedLine[3]);
                    }
                    //Andere Zeilen beibehalten
                    else
                    {   
                        writer.println(line);
                    }

                filenr = filenr + 1;
                }

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally{
                reader.close();
                br.close();

                File realName = new File(String.valueOf(f));
                realName.delete();                                              //delete old file
                writer.close();
                sucess = new File(String.valueOf(f)+".tmp").renameTo(realName); //rename tmp File to the others name
                if(sucess != true)
                {
                    NTausgabe=Daten.DatenTextarea.getText()+"\n"+"Rename File failed";
                    Daten.DatenTextarea.setText(String.valueOf(NTausgabe));
                }
                else
                {
                    NTausgabe=Daten.DatenTextarea.getText()+"\n"+"File renamed sucessfully";
                    Daten.DatenTextarea.setText(String.valueOf(NTausgabe));
                }
            }

 } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM