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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王龙 中级黑马   /  2013-3-29 18:02  /  1546 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将d盘下s1.txt复制到s2.txt,如何实现,求详细答案
我知道应该用到BufferedReader 和 BufferedWriter,但是没有思路

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 25分咯

查看全部评分

5 个回复

倒序浏览
  1. import java.io.*;
  2. public class Copy {

  3.         public static void main(String[] args){
  4.                 //此为1.7新功能可以自动关闭流
  5.                 try(//创建输入流
  6.                                 BufferedReader br = new BufferedReader(new InputStreamReader(
  7.                                 new FileInputStream("D:\\s1.txt")));
  8.                         //创建输出流       
  9.                                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
  10.                                                 new FileOutputStream("D:\\s2.txt")));
  11.                                 ){
  12.                         String temp = "";
  13.                         while((temp = br.readLine()) != null){
  14.                                
  15.                                 bw.write(temp,0,temp.length());
  16.                         }

  17.                 }
  18.                 catch(IOException e){
  19.                        
  20.                         System.out.println("您的文件不存在哦!");
  21.                         e.printStackTrace();
  22.                 }
  23.                
  24.         }
  25. }
复制代码
额 这个貌似是基础考题吧

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
HM张健 发表于 2013-3-29 18:48
额 这个貌似是基础考题吧

写入一行的时候 bw.write(temp)就可以了. 而且每写完一行要写入换行:  bw.newLine() ,否则生成的文件里面缺少换行
回复 使用道具 举报
本帖最后由 王俊杰 于 2013-3-30 15:44 编辑

文件处理这一部分内容,我感觉要把类的继承层次弄清楚是比较重要的。

说一下我的理解吧,希望能够给你一定的启示  呵呵      我尽量从思路上来展开,而不是直接上代码,希望你理解

要复制一个文件,虽然不论是那种类型都可以用面向字节的流式输入输出来处理,但是java中专门提供了面向字符的输入输出流

我在附件提供了reader的继承层次,writer的跟它差不多。

根据你的问题,读取文本文件的思路是用File对象作为输入源,构建FileReader对象,再用FileReader对象构建BufferedReader对象。写入文件也是一样的。
  1. String src = "G:/src.txt";
  2. String dest = "G:/dest.txt";
  3.                
  4. File srcFile = new File(src);
  5. File destFile = new File(dest);
  6.                
  7. FileReader fileReader = new FileReader(srcFile);               
  8. FileWriter fileWriter = new FileWriter(destFile);
  9.                
  10. BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
  11. BufferedReader bufferedReader = new BufferedReader(fileReader);
复制代码
下面开始读取源文件,同时写新文件
  1. int ch;               
  2. while ((ch = bufferedReader.read()) != -1) {
  3.         bufferedWriter.write(ch);                        
  4. }
复制代码
如果觉得不好理解,可以写成这样:
  1. int ch  = bufferedReader.read();               
  2. while (ch != -1) {
  3.         bufferedWriter.write(ch);
  4.         ch = bufferedReader.read();
复制代码
最后不要忘了关闭流。
  1. bufferedReader.close();
  2. bufferedWriter.close();
复制代码
希望能够给你一些有益的启示。祝共同进步!!

reader.PNG (21.58 KB, 下载次数: 7)

reader.PNG

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2

查看全部评分

回复 使用道具 举报
继续追问,或将帖子分类改成【已解决】哦~
回复 使用道具 举报
拷贝文本文件:
复制原理:将一个文件中的数据存储到另一个文件
步骤:
1.    创建一个文件,用于存储要被复制文件中的数据
2.    定义读取流和文件关联
3.    通过不断的读写完成数据存储。
4.    关闭资源
  1. import java.io.*;

  2. public class CopyFileDemo {
  3.     public static void main(String[] args) {
  4.        copy_2();// 性能优
  5.     }
  6.     public static void copy_2() {
  7.        // 创建目的地
  8.        FileWriter fw = null;
  9.        // 与已有文件关联
  10.        FileReader fr = null;
  11.        // 定义一个字符数组,用于存储读到的字符
  12.        // 该read(char[] ch)方法返回的是读到的字符的个数
  13.        char[] ch = new char[1024];
  14.        int num = 0;
  15.        try {
  16.            fw = new FileWriter("C:\\Users\\lenovo\\Desktop\\copytest.txt");
  17.            fr = new FileReader("C:\\Users\\lenovo\\Desktop\\BlackHorse.txt");
  18.            while ((num = fr.read(ch)) != -1) {
  19.               fw.write(ch, 0, num);
  20.            }
  21.        } catch (FileNotFoundException e) {
  22.            e.printStackTrace();
  23.        } catch (IOException e) {
  24.            e.printStackTrace();
  25.        } finally {// 释放资源
  26.            if (fr != null)
  27.                try {
  28.                   fr.close();
  29.               } catch (IOException e) {
  30.                   e.printStackTrace();
  31.               }
  32.            if (fw != null)
  33.               try {
  34.                   fw.close();
  35.               } catch (IOException e) {
  36.                   e.printStackTrace();
  37.               }
  38.        }

  39.     }
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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