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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiaojinhui 中级黑马   /  2013-5-10 20:36  /  1893 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qiaojinhui 于 2013-5-11 15:02 编辑

编写一个程序拷贝一个文件,尽量使用效率高的方式。怎么写啊!

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

10 个回复

正序浏览
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
一、直接读取

public static void read1(File file)throws Exception{
FileInputStream fis = new FileInputStream(file);
int b = 0;
int count = 1;
while((b = fis.read()) != -1){
if(b == '\n')
count++;
}
fis.close();
System.out.println(count);
}
二、全部读到缓冲区,在读取

public static void read2(File file){
try{
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int b = 0;
int count = 1;
while((b = bis.read())!=-1)
if(b == '\n')
count++;
fis.close();
bis.close();
System.out.println(count);
}catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
三、读一部分到缓冲区,再读取。如此往复


public static void read3(File file) throws Exception{
FileInputStream fis = new FileInputStream(file);
byte []buf = new byte[1024];
int b = 0;
int count = 1;
while((b = fis.read(buf) )!=-1)
if(b == '\n')
count++;
fis.close();
System.out.println(count);
}

评分

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

查看全部评分

回复 使用道具 举报
Miss小强 发表于 2013-5-10 21:09
思路给你把:
1:将源文件与读取流相关,即输入流;
2 创建目标文件dest 并与流相关,当然是输出流;

谢谢了啊
回复 使用道具 举报
Sword 发表于 2013-5-10 21:36
用缓冲流的方式拷贝最高效,下面给出一个例子:希望对你有所帮助

谢谢了!
回复 使用道具 举报
效率高的就是使用字节流进行拷贝,这是基础测试题吧,建议把视频看完了再做,或者边看边做。

就当是对自己的一个总结也好,
回复 使用道具 举报
用缓冲流的方式拷贝最高效,下面给出一个例子:
  1. /*
  2. 字符流:
  3. FileReader
  4. FileWriter

  5. BufferedReader
  6. BufferedWriter

  7. 字节流:
  8. 两个基类:
  9. InputStream(读) OutputStream(写)

  10. 需求:想要操作图片数据,这时候就要用到字节流
  11. */
  12. import java.io.*;
  13. class FileStream{
  14.     public static void main(String []args) throws IOException
  15.    {
  16.       // writeFile();
  17.           // readFile_1();
  18.           // readFile_2();
  19.           readFile_3();
  20.    }
  21.    public static void readFile_1() throws IOException
  22.    {
  23.      FileInputStream fis=new FileInputStream("fos.txt");
  24.          
  25.          int ch=0;
  26.          while((ch=fis.read())!=-1)
  27.          {
  28.             System.out.println((char)ch);
  29.          }
  30.          fis.close();
  31.    }
  32.    
  33.     public static void readFile_2() throws IOException
  34.    {
  35.      FileInputStream fis=new FileInputStream("fos.txt");
  36.           
  37.           //以这种方式为主,这是最好,最优化的方式
  38.          byte[] buf=new byte[1024];
  39.          int len=0;
  40.           while((len=fis.read(buf))!=-1)
  41.           {
  42.            System.out.println(new String(buf,0,len));
  43.           }
  44.        
  45.          fis.close();
  46.    }
  47.    
  48.     public static void readFile_3() throws IOException
  49.    {
  50.      FileInputStream fis=new FileInputStream("fos.txt");
  51.           
  52.         // int num=fis.available();
  53.        
  54.         //这种方式要慎用,数据不是太大的话,可以这样使用
  55.         byte[] buf=new byte[fis.available()];//定义一个刚刚好的缓冲区,不用再循环了
  56.           
  57.          fis.read(buf);
  58.          
  59.         // System.out.println("num="+num);
  60.          System.out.println(new String(buf));
  61.          
  62.        
  63.          fis.close();
  64.    }
  65.    
  66.    public static void writeFile() throws IOException
  67.    {
  68.       FileOutputStream fos=new FileOutputStream("fos.txt");
  69.           
  70.           //将字符串变为字节数组
  71.           fos.write("abcde".getBytes());
  72.           
  73.           fos.close();
  74.           
  75.    }
  76. }
复制代码
希望对你有所帮助
回复 使用道具 举报
BufferedReader
BufferedWriter
回复 使用道具 举报
思路给你把:
1:将源文件与读取流相关,即输入流;
2 创建目标文件dest 并与流相关,当然是输出流;
3 输入流读取放入数组中,用输出流写入读取的内容
4 处理相关异常;
5 关闭流的动作一定要执行。
回复 使用道具 举报
毕老师视频上有的
回复 使用道具 举报
就是要求加数组/缓冲区吧,还没怎么去做那些题,个人观点,仅供参考,O(∩_∩)O~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马