请问java对文件操作中,有没有在文件中插入一些字节,使原数据能后移而不覆盖的方法呀。

xiaofeng3385 2006-02-15 12:17:48
请问java对文件操作中,有没有在文件中插入一些字节,使原数据能后移而不覆盖的方法呀。

...全文
673 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
khhqy 2006-02-16
  • 打赏
  • 举报
回复
哎,这些我都看不懂....呵呵看看,http://khhqy.Lun123.com 我的创业网!
现向全国招骋,主要工作:上网发发电子邮件,聊天等!
27257674 2006-02-15
  • 打赏
  • 举报
回复
如果你想从第十行开始写

最笨的方法
就是采用READLINE
读十次
就到11行了撒
King_Style 2006-02-15
  • 打赏
  • 举报
回复
这样不就向后移了?
-------------
import java.io.*;
class TestPrint{
public static void main(String args[]){
try{

RandomAccessFile rf=new RandomAccessFile("c:/1.txt","rw");
rf.seek(0);//从文件首开始写入
StringBuffer line=new StringBuffer();
int i=0;
while(i<9){
line.append("\n");
i++;
}
rf.writeBytes(line.toString());
rf.writeBytes("2222222222");
rf.close();

}catch(Exception ex){
ex.printStackTrace();
}
}
}
King_Style 2006-02-15
  • 打赏
  • 举报
回复
清问下,假如想往文件的第10行写入,怎么找到这行开始写呀,
------------------------
//从当前起隔9行写入
import java.io.*;
class TestPrint{
public static void main(String args[]){
try{

RandomAccessFile rf=new RandomAccessFile("c:/1.txt","rw");
rf.seek(rf.length());
StringBuffer line=new StringBuffer();
int i=0;
while(i<9){
line.append("\n");
i++;
}
rf.writeBytes(line.toString());
rf.writeBytes("111111111");
rf.close();

}catch(Exception ex){
ex.printStackTrace();
}
}
}
xiaofeng3385 2006-02-15
  • 打赏
  • 举报
回复
回复人: infowain(infowain) ( ) 信誉:100 2006-02-15 09:11:00 得分: 0
1.使用RandomAccessFile
2.要自己把原来的数据向后移。
----------------------------------------

怎么向后移那,这个也是我主要想问的呀


xiaofeng3385 2006-02-15
  • 打赏
  • 举报
回复
blue_afreet(迷茫)
--------------

清问下,假如想往文件的第10行写入,怎么找到这行开始写呀,
blue_afreet 2006-02-15
  • 打赏
  • 举报
回复
FileWriter fw=new FileWriter("FileName", true);
BufferedWriter bw=new BufferedWriter(fw);
bw.write("String");
bw.newLine();
bw.flush();
bw.close();
fw.close();

其中FileName包含了地址和具体的文件名,比如C:/hello.txt;

这段代码可以实现往特定的文本中追加行书写;文本原先的内容不会丢失;也不会介意原文本的内容或行数。
infowain 2006-02-15
  • 打赏
  • 举报
回复
1.使用RandomAccessFile
2.要自己把原来的数据向后移。
blue_afreet 2006-02-15
  • 打赏
  • 举报
回复
晕。好像写错了。第一句代码应该是 : FileWriter fw=new FileWriter("FileName", true);
xiaofeng3385 2006-02-15
  • 打赏
  • 举报
回复
我用RandomAccessFile
文件的特定行写入信息,但写入字节数比原来行的多时会覆盖下一行的数据,

这个能解决么?
xiaofeng3385 2006-02-15
  • 打赏
  • 举报
回复
回复人: nirendao(黑山老猫) ( ) 信誉:100 2006-02-15 08:30:00 得分: 0

当午给出的是在末尾添加,不合楼主的意思啊。
用最原始的方法来做未必就会麻烦,楼主可以考虑把原文件都读出到一个缓存中,然后再做处理。
-----------------------------------------------------

把原文件都读出到一个缓存中,处理后还要全重新写回文件么,那样会很耗时,
blue_afreet 2006-02-15
  • 打赏
  • 举报
回复
FileWriter fw=new FileWriter("FileName", false);
BufferedWriter bw=new BufferedWriter(fw);
bw.write("String");
bw.newLine();
bw.flush();
bw.close();
fw.close();

其中FileName包含了地址和具体的文件名,比如C:/hello.txt;

这段代码可以实现往特定的文本中追加行书写;文本原先的内容不会丢失;
King_Style 2006-02-15
  • 打赏
  • 举报
回复
BufferedWriter out = new BufferedWriter(new FileWriter("text.txt",true));
byte bText[] = new byte[11];
for(int i = 0;i<10;i++)
bText[i] =(byte)i;
out.write(bText);
out.flush();
out.close();
低调的小青蛙 2006-02-15
  • 打赏
  • 举报
回复
"使原数据能后移" 这是不能自动做到的。

对于一般的数据库软件来说,他的记录也采用定长的办法,修改数据都避免产生需要 "后移",而把一些 text 类型的变长型数据放到另外一个单独的区域处理。
执假以为真 2006-02-15
  • 打赏
  • 举报
回复
当午给出的是在末尾添加,不合楼主的意思啊。
用最原始的方法来做未必就会麻烦,楼主可以考虑把原文件都读出到一个缓存中,然后再做处理。
masse 2006-02-15
  • 打赏
  • 举报
回复
try {
File f = new File("filename");
RandomAccessFile raf = new RandomAccessFile(f, "rw");

// Read a character
char ch = raf.readChar();

// Seek to end of file
raf.seek(f.length());

// Append to the end
raf.writeChars("aString");
raf.close();
} catch (IOException e) {
}
低调的小青蛙 2006-02-15
  • 打赏
  • 举报
回复
搂主的想法是,某一行超过原来的内容,后边的自动往后移动。这种想法是没办法实现的,只能自己往后移。

搂主担心,"那样会很耗时"。其实,就算是系统提供这样的功能,那么这个功能用起来一样很耗时。因此,避免超过原来的长度。

前面我提到,对于一般的数据库软件来说,他的记录也采用定长的办法,修改数据都避免产生需要 "后移",而把一些 text 类型的变长型数据放到另外一个单独的区域处理。
xiaofeng3385 2006-02-15
  • 打赏
  • 举报
回复
关键是在于在第10行写数据怎样不会覆盖下行 的数据,
RandomAccessFile 没有writeln类似的方法吧,
用BufferedWriter 好像又找不到行数写
怎么办呀,

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧