2013-05-21 19 views
0

我有写了一些数据 - 一个程序,我使用这个逻辑将数据写入文件被删除之前的一切它(配售的00),并改变文件大小

FileOutputStream outpre = new FileOutputStream(getfile()); 
FileChannel ch = outpre.getChannel(); 
ch.position(startwr); 
ch.write(ByteBuffer.wrap(dsave)); 
outpre.close(); 

它写出正确的数据来正确的位置,唯一的问题是,在起始位置之前的一切写(startwr)获取与00的更换,该文件也改变使得在将写做,该文件的末尾点。

我怎样才能将数据写入文件,而不会破坏先前数据,更改文件的大小?

+0

我建议你试试RandomAccessFile。我在没有这个问题的Java Chronicle中使用它。 –

回答

2

您需要的流指示将追加或覆盖该文件的内容...

看看FileOutpuStream(File, boolean)更多细节

更新

一些碴后左右,我发现我可以接近工作的唯一解决方案是...

RandomAccessFile raf = null; 

try { 
    raf = new RandomAccessFile(new File("C:/Test.txt"), "rw"); 
    raf.seek(3); 
    raf.writeBytes("BB"); 
} catch (IOException exp) { 
    exp.printStackTrace(); 
} finally { 
    try { 
     raf.close(); 
    } catch (Exception e) { 
    } 
} 
+0

Java的API说thus- “追加 - 如果为true,则将字节写入文件,而不是开始的结束” 是什么时,最高审计机关“的字节将被写入到文件末尾的API意思而不是开始时”我不知道这将如何解决 你是说,如果我的代码更改为 FileOutputStream中outpre =新的FileOutputStream中(GETFILE(),TRUE)的问题; 那么错误会消失? –

+0

本质上,它在说,如果'append'是'真'的数据将被写入到文件末尾,其附加到文件,否则原有的内容将被丢弃,新的数据写入到文件中。是的,如果你使用'FileOutputStream(getfile(),true)'你应该发现你写入文件的任何东西都会被追加到文件末尾 – MadProgrammer

+0

好的,谢谢,到目前为止,这个方法工作得很好从来没有猜到在RandomAccessFile的它使用(文件,字符串)什么是字符串的重要构造还可以使用RandomAccessFile的)? –

0

你可以这样修复它

FileChannel fc = FileChannel.open(getFile().toPath(), StandardOpenOption.APPEND); 
+0

我刚试过这个,当它追加到文件末尾时,OP正在尝试写入特定位置在这个文件中,我无法通过这种方式使用'FileChannel'来实现。我对'FileChannel'没有多少经验,所以如果你知道寻找文件位置和写作的方法,那么请不要犹豫,填写我们:P – MadProgrammer

相关问题