A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yin1031468524 中级黑马   /  2013-6-4 17:50  /  1926 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想给指定文本 a.txt 增加一行数据 但是用BufferedWriter 的 write方法 把之前a.txt 文件里的内容都给覆盖了,还有如果想修改或删除 a.txt里的某一行 能直接得到并修改删除吗?
希望给一些io的建议,都被搞糊涂了,求大神们指教、、、

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

倒序浏览
使用FileOutputStream(File file, boolean append)这个构造方法,当第二个参数为true的时候,那么将会将字节写入指定文件末尾处,而不是文件的开始处。
我觉得应该是不能直接通过流删除文件中的某一行或者修改其内容的,java的File类和FileOutputStream类都没有提供修改文件内容的方法。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
(1):如果是文本文件,直接用Filewriter的write方法就行,但是有一点点小改动如:
  FileWriter fw=new FileWriter("d:\\123.java",true);//传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处续写
  fw.write("hahahaha");
(2):第二个问题,我没碰到过,但是我相信有方法的,看把行号标出来试试也是有可能实现的。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1 鼓励一个。。。

查看全部评分

回复 使用道具 举报
建议楼主看下这个类   应该能帮楼主实现想要的功能  楼上说的追加尾部那个功能的实现查看源码最后调用的是native本地方法.RandomAccessFile
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
1、有一个 FileOutputStream(File , true);的构造方法。
如:
fos = new FileOutputStream(File f, true);
BufferedWriter   bw = new BufferedWriter(new OutputStreamWriter(fos));

就这样 就可接着往下写。
2、可以的。用bufferedReader  readLine 方法可以实现这个功能

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
1.关于不覆盖可以做到
     一种笨方法:先读取文件内容,写在BufferWriter中,在写在BufferWriter追加你要写的东西
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import java.io.StringReader;


  8. public class WriterFile {

  9.         /**
  10.          * @param args
  11.          * @throws IOException
  12.          * @throws FileNotFoundException
  13.          */
  14.         public static void main(String[] args) throws FileNotFoundException, IOException {
  15.                 // TODO Auto-generated method stub
  16.                 //像D盘里面的abc.txt文件写内容 路径:d://abc.txt
  17.                 //writer("d://abc.txt", "12334");
  18.                 test4("aaaabbbbcccc", "d://abc.txt");
  19.         }
  20.        
  21.         private static void test4(String str, String filePath) throws FileNotFoundException, IOException {
  22.         // 将一段字符串写入文件末尾
  23.                  BufferedReader br = new BufferedReader(new FileReader(filePath)); // FileReader类可以开发文件
  24.                  String data = new String();
  25.          String s;
  26.          s = br.readLine();
  27.          while (s != null) {
  28.                  // System.out.println(1);
  29.                  data = data + s + "\r\n";
  30.                  s = br.readLine();
  31.          }
  32.          br.close();
  33.         
  34.          
  35.          //写,继续写
  36.          System.out.println(data);
  37.          br = new BufferedReader(new StringReader(data));
  38.          PrintWriter fw = new PrintWriter(new File(filePath));
  39.   
  40.          
  41. //         String strs = null;
  42.          while((s = br.readLine()) != null) {
  43.                  fw.print(s);
  44.                  fw.print("\r\n");
  45.          }
  46.          //给指定的文件加一行数据
  47.          fw.print(str);
  48.          br.close();
  49.          fw.close();
  50.          System.out.println("写入成功!");
  51.                
  52.         }
  53. }
复制代码
2.修改或者删除a.text中某一行,  你要知道是哪一行对吧,假如修改第三行,或者删除第三行。
  1. private static void test5(int i, String filePath, String str) throws FileNotFoundException, IOException {
  2.         // 将一段字符串写入文件末尾
  3.                  BufferedReader br = new BufferedReader(new FileReader(filePath)); // FileReader类可以开发文件
  4.                  String data = new String();
  5.          String s;
  6.          int sign = 0; //测试独到第几行
  7.          
  8.          while ((s=br.readLine()) != null) {
  9.                           sign++;
  10.                           //这里就是要修改或者删除的代码
  11.                  if(sign != i) {
  12.                          data = data + s + "\r\n";
  13.                  }
  14.                  else {
  15.                          if(str != null)
  16.                                  data = data + str + "\r\n";
  17.                  }
  18.          }
  19.          br.close();
  20.         
  21.          System.out.println(data);
  22.         //写,继续写
  23.          System.out.println(data);
  24.          br = new BufferedReader(new StringReader(data));
  25.          PrintWriter fw = new PrintWriter(new File(filePath));
  26.   
  27.          while((s = br.readLine()) != null) {
  28.                  fw.print(s);
  29.                  fw.print("\r\n");
  30.          }
  31.          
  32.          br.close();
  33.          fw.close();
  34.          System.out.println("修改或者删除成功!");
复制代码
思路差不多,删除则传递为null

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马