将字符串复制到Java中的文件的开头

时间:2011-09-07 19:15:21

标签: java file

我想在文件的开头写一个字符串,我该怎么做?

我根本不知道如何添加字符串..这是我到目前为止所做的:

  public static void prepend (String filename, String data) throws IOException{

    FileOutputStream file= new FileOutputStream(filename);

}

(i)write()方法只接受字节 - 在我的情况下我应该怎么做才能使用它?

(ii) - 如何将字符串复制到文件的开头?

并且 - 如果有人知道一个网站上有所有的作家\读者和所有这些流被排列和解释得很好 - 我会非常感激,我会失去理智。

谢谢!

6 个答案:

答案 0 :(得分:8)

您可以使用RandomAccessFile类。

http://download.oracle.com/javase/6/docs/api/java/io/RandomAccessFile.html

public static void main(String[] args) throws Exception {
    RandomAccessFile file = new RandomAccessFile("test.txt", "rws");
    byte[] text = new byte[(int) file.length()];
    file.readFully(text);
    file.seek(0);
    file.writeBytes("Prepend 8");
    file.write(text);
    file.close();
    System.out.println("Done");
}

答案 1 :(得分:6)

要编写文本,您需要创建Writer - 例如OutputStreamWriter。您可以使用FileWriter代替,但我更愿意将FileOutputStream包裹在OutputStreamWriter中,因为我可以控制编码。

你不能真正预先添加到文件的开头 - 你必须将新文本写入新文件的开头,然后复制旧文件的内容,然后在必要时重命名文件。具体如何操作将取决于现有文件的内容。

答案 2 :(得分:1)

你可以做很多事情。

创建一个PrintStream,传入您创建的“文件”,然后使用println(数据)打印数据,或者只是打印(数据),如果您不想在其后添加系统相关的新行。

您可以创建一个输出流写入器来包装您创建的输出流,然后使用printwriter将其包装起来以获得与上面相同的行为。

如果您需要,编写器方法在处理字符编码时会更好。

答案 3 :(得分:0)

您可以使用BufferedWriter,即

// read the existing contents of the file into a string builder   
BufferedReader is = new BufferedReader
    (new InputStreamReader(new FileInputStream(filename)));

StringBuilder sb = new StringBuilder();
String line;
while ((line = is.readLine()) != null) {
    sb.append(line);
}

// open the file for writing
BufferedWriter s = new BufferedWriter
    (new OutputStreamWriter(new FileOutputStream(filename)));

// prepend your text
s.writeLine("some line of text to prepend");

// rewrite the file contents
s.writeLine(sb.toString());

答案 4 :(得分:0)

public static void prepend(String filename,string data) throws IOException{

 BufferedReader in = new BufferedReader(new FileReader(fileName));
 StringBuilder reply = new StringBuilder();
 reply.append(data); 
 String str = new String();

 while( (str = in.readLine())!=null)
   reply.append(str);

 str = reply.toString();
 BufferedWriter out= new BufferedWriter(new FileWriter(filename));
 out.write(str);


 if(in !=null){
 try{ in.close();} catch(IOException e){e.printStackTrace();}
 if(out!=null)
try{out.close();} catch(IOException ex) {ex.printStackTrace();}
}

答案 5 :(得分:0)

这里是运行代码。

private static void addHeader(File fileName){

    FileOutputStream fileOutputStream =null;

    BufferedReader br = null;
    FileReader fr = null;
    String newFileName = fileName.getAbsolutePath() + "@";

    try {

        fileOutputStream = new FileOutputStream(newFileName);
        fileOutputStream.write("yourCopiedDataHere".getBytes());

        fr = new FileReader(fileName);
        br = new BufferedReader(fr);

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            fileOutputStream.write(("\n"+sCurrentLine).getBytes());

        }
        fileOutputStream.flush();


    } catch (IOException e) {

        e.printStackTrace();

    } finally {
        try {
            fileOutputStream.close();
            if (br != null)
                br.close();

            if (fr != null)
                fr.close();

            System.out.println(fileName+" is deleted "+ fileName.delete());
            new File(newFileName).renameTo(new File(newFileName.replace("@", "")));


        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }

}