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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我想通过管道流来复制文件,这是我的代码,不过出现问题了,求大神给看看,该怎么解决呢?
  1. package StreamDemo;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.io.PipedInputStream;
  10. import java.io.PipedOutputStream;

  11. public class PipedStreamDemo {
  12.        
  13.         PipedInputStream pis = null;
  14.         public static void main(String[] args) {
  15.                 PipedInputStream pis = new PipedInputStream();
  16.                 PipedOutputStream pos = new PipedOutputStream();
  17.                 try {
  18.                         pis.connect(pos);
  19.                 } catch (IOException e) {
  20.                         e.printStackTrace();
  21.                 }
  22.                 finally{
  23.                         try {
  24.                                 if(pis!=null){
  25.                                         pis.close();
  26.                                 }
  27.                         } catch (Exception e2) {
  28.                                 e2.printStackTrace();
  29.                         }
  30.                         try {
  31.                                 if(pos!=null){
  32.                                         pos.close();
  33.                                 }
  34.                         } catch (Exception e2) {
  35.                                 e2.printStackTrace();
  36.                         }
  37.                 }
  38.                
  39.                 Thread t1 = new Thread(new inputStream(pos));
  40.                 Thread t2 = new Thread(new outputStream(pis));
  41.                 t1.start();
  42.                 t2.start();
  43.                
  44.         }
  45. }

  46. class inputStream implements Runnable{         //这是输入流。
  47.        
  48.         PipedOutputStream pos = null;
  49.        
  50.         BufferedReader bufr = null;
  51.        
  52.         inputStream(PipedOutputStream pos){
  53.                 this.pos = pos;
  54.                 try {
  55.                         bufr = new BufferedReader(new InputStreamReader(new FileInputStream("BufferedDemo.java")));  //跟硬盘上的文件绑定
  56.                 } catch (FileNotFoundException e) {
  57.                         e.printStackTrace();
  58.                 }
  59.         }

  60.         @Override
  61.         public void run() {
  62.                 try {

  63.                         String line = null;
  64.                         while((line=bufr.readLine())!=null){   //读文件上的内容
  65.                                 pos.write(line.getBytes());      //用管道流将输入流读到的文件内容以字节数组的形式写入到管道流中。
  66.                         }
  67.                 } catch (IOException e) {
  68.                         e.printStackTrace();
  69.                 }
  70.                
  71.                 finally{
  72.                         try {
  73.                                 if(pos!=null){
  74.                                         pos.close();
  75.                                 }
  76.                         } catch (Exception e2) {
  77.                                 e2.printStackTrace();
  78.                         }
  79.                        
  80.                         try {
  81.                                 if(bufr!=null){
  82.                                         bufr.close();
  83.                                 }
  84.                         } catch (Exception e2) {
  85.                                 e2.printStackTrace();
  86.                         }
  87.                 }
  88.         }
  89. }

  90. class outputStream implements Runnable{    //输出流
  91.         PipedInputStream pis = null;
  92.         BufferedWriter bufw = null;
  93.        
  94.         outputStream(PipedInputStream pis){
  95.                 this.pis = pis;
  96.                 try {
  97.                         bufw = new BufferedWriter(new FileWriter("test7.txt"));      //跟文件进行绑定,如果文件不存在,系统会创建一个新文件
  98.                                                                                                                                                 //如果文件存在,系统会将原来的文件覆盖掉。
  99.                 } catch (IOException e) {
  100.                         e.printStackTrace();
  101.                 }
  102.         }

  103.         @Override
  104.         public void run() {
  105.                
  106.                 byte by[] = new byte[1024];
  107.                
  108.                 int len = 0;
  109.                
  110.                 try {
  111.                         while((len=pis.read(by))!=-1){         //用管道流将管道流里面的内容读到字节数组中
  112.                                 bufw.write(new String(by),0,len);       //将字节数组中的的内容写入到文件中。
  113.                         }
  114.                         System.out.println("复制完成!");
  115.                 } catch (IOException e) {
  116.                         e.printStackTrace();
  117.                 }
  118.                 finally{
  119.                         try {
  120.                                 if(pis!=null){
  121.                                         pis.close();
  122.                                 }
  123.                         } catch (Exception e2) {
  124.                                 e2.printStackTrace();
  125.                         }
  126.                         try {
  127.                                 if(bufw!=null){
  128.                                         bufw.close();
  129.                                 }
  130.                         } catch (Exception e2) {
  131.                                 e2.printStackTrace();
  132.                         }
  133.                 }
  134.                
  135.         }
  136. }
复制代码


这是出现的问题:
java.io.IOException: Pipe closed
        at java.io.PipedInputStream.read(PipedInputStream.java:308)
        at java.io.PipedInputStream.read(PipedInputStream.java:378)
        at java.io.InputStream.read(InputStream.java:101)
        at StreamDemo.outputStream.run(PipedStreamDemo.java:117)
        at java.lang.Thread.run(Thread.java:744)
java.io.IOException: Pipe closed
        at java.io.PipedInputStream.checkStateForReceive(PipedInputStream.java:261)
        at java.io.PipedInputStream.receive(PipedInputStream.java:227)
        at java.io.PipedOutputStream.write(PipedOutputStream.java:149)
        at java.io.OutputStream.write(OutputStream.java:75)
        at StreamDemo.inputStream.run(PipedStreamDemo.java:70)
        at java.lang.Thread.run(Thread.java:744)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马