2012-04-01 169 views
17

我正在尝试编写一个方法,使得“log.txt文件”不存在,然后写入文件。我遇到的问题是每次调用方法时,都会覆盖现有的日志。如何更改该方法,以便覆盖刚刚更新文件的数据?在不覆盖Java的情况下写入文本文件

我写文件方法:

File log = new File("log.txt") 
    try{ 
    if(log.exists()==false){ 
      System.out.println("We had to make a new file."); 
      log.createNewFile(); 
    } 
    PrintWriter out = new PrintWriter(log); 
    out.append("******* " + timeStamp.toString() +"******* " + "\n"); 
    out.close(); 
    }catch(IOException e){ 
     System.out.println("COULD NOT LOG!!"); 
    } 
+4

PrintWriter pw = new PrintWriter(new FileWriter(New File(),true)); – 2012-04-01 01:52:22

回答

34

只要改变PrintWriter out = new PrintWriter(log);

PrintWriter out = new PrintWriter(new FileWriter(log, true)); 
+0

非常感谢!如果你可以解释为什么改变参数修复它,我将不胜感激。 – rmp2150 2012-04-01 01:57:24

+1

Fom javadoc,FileWriter(文件文件,布尔附加)。第二个参数指示文件是否以追加模式打开。 – 2012-04-01 02:23:48

+0

它不会为我工作。我只有最后一个文本在我的目标文件:( – Kenji 2014-11-17 06:15:41

9

使用一个FileWriter来代替。

FileWriter(File file, boolean append) 

构造函数中的第二个参数告诉FileWriter将任何给定的输入附加到文件而不是覆盖它。

这里是你的榜样一些代码:

File log = new File("log.txt") 

try{ 
    if(!log.exists()){ 
     System.out.println("We had to make a new file."); 
     log.createNewFile(); 
    } 

    FileWriter fileWriter = new FileWriter(log, true); 

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 
    bufferedWriter.write("******* " + timeStamp.toString() +"******* " + "\n"); 
    bufferedWriter.close(); 

    System.out.println("Done"); 
} catch(IOException e) { 
    System.out.println("COULD NOT LOG!!"); 
} 
+0

没有必要包括'if(!log.exists()){log.createNewFile();}'块,因为写入文件将创建它,如果它 – 2012-04-01 02:15:18

+2

如果文件不存在,FileWriter会尝试创建文件,如果文件不能创建,将抛出IOException 但是,添加额外的检查有助于理解和还在代码中创建了一个防御点来扩展错误处理。 – thrau 2012-04-01 02:21:24

2

出于某种原因,没有其他方法为我工作...所以我想这和工作。希望它可以帮助..

JFileChooser c= new JFileChooser(); 
c.showOpenDialog(c); 
File write_file = c.getSelectedFile(); 
String Content = "Writing into file\n hi \n hello \n hola"; 
try 
{ 
    RandomAccessFile raf = new RandomAccessFile(write_file, "rw"); 
    long length = raf.length(); 
    System.out.println(length); 
    raf.setLength(length + 1); //+ (integer value) for spacing 
    raf.seek(raf.length()); 
    raf.writeBytes(Content); 
    raf.close(); 
} 
catch (Exception e) { 
    System.out.println(e); 
} 
2
JFileChooser c= new JFileChooser(); 
c.showOpenDialog(c); 
File write_file = c.getSelectedFile(); 
String Content = "put here the data to be wriiten"; 
try 
    { 
    FileWriter fw = new FileWriter(write_file); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.append(Content); 
    bw.append("hiiiii"); 
    bw.close(); 
    fw.close(); 
    } 
catch(Exception e) 
    { 
    System.out.println(e); 
    `} 
+0

这是最简单的方法 – 2014-07-15 14:57:27

0

试试这个

public void writeFile(String arg1,String arg2) { 
 
\t \t try { 
 
\t \t \t if (!dir.exists()) { 
 

 
\t \t \t \t if (dir.mkdirs()) { 
 

 
\t \t \t \t \t Toast.makeText(getBaseContext(), "Directory created", 
 
\t \t \t \t \t \t \t Toast.LENGTH_SHORT).show(); 
 
\t \t \t \t } else { 
 
\t \t \t \t \t Toast.makeText(getBaseContext(), 
 
\t \t \t \t \t \t \t "Error writng file " + filename, Toast.LENGTH_LONG) 
 
\t \t \t \t \t \t \t .show(); 
 
\t \t \t \t } 
 
\t \t \t } 
 

 
\t \t \t else { 
 

 
\t \t \t \t File file = new File(dir, filename); 
 
\t \t \t \t if (!file.exists()) { 
 
\t \t \t \t \t file.createNewFile(); 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t \t FileWriter fileWritter = new FileWriter(file, true); 
 
\t \t \t \t BufferedWriter bufferWritter = new BufferedWriter(fileWritter); 
 
\t \t \t \t bufferWritter.write(arg1 + "\n"); 
 
\t \t \t \t bufferWritter.close(); 
 

 
      } catch (Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t \t Toast.makeText(getBaseContext(), 
 
\t \t \t \t \t "Error writng file " + e.toString(), Toast.LENGTH_LONG) 
 
\t \t \t \t \t .show(); 
 
\t \t } 
 

 
\t }

1

这里是它如何工作的一个简单的例子,最好的做法把一个try \追成但是对于基本的使用,这应该可以做到。为此,您有一个字符串和文件路径,并将其应用于FileWriter和BufferedWriter。这将写入“Hello World”(数据变量),然后创建一个新行。每次运行时都会将Data变量添加到下一行。

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 


String Data = "Hello World"; 
File file = new File("C:/Users/stuff.txt"); 
FileWriter fw = new FileWriter(file,true); 
BufferedWriter bw = new BufferedWriter(fw); 
bw.write(Data); 
bw.newLine(); 
bw.close(); 
0

你甚至可以使用FileOutputStream来得到你所需要的。这是如何完成的,

File file = new File(Environment.getExternalStorageDirectory(), "abc.txt"); 
FileOutputStream fOut = new FileOutputStream(file, true); 
OutputStreamWriter osw = new OutputStreamWriter(fOut); 
osw.write("whatever you need to write"); 
osw.flush(); 
osw.close(); 
相关问题