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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-20 20:24  /  1657 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
public class Copy{
    public static void main(String[] args) throws Exception
    {
        copy();
    }
    public static void copy(){
        InputStream ips=null;
        OutputStream ops=null;
        try
     { ips=new FileInputStream("d:\1.txt");
         ops=new FileOutputStream("f:");
         byte[] buf=new byte[1024];
         int len=ips.read(buf);
         ops.write(buf,0,len);
         ips.close();
         ops.close();
        }
        catch(Exception e)
        {
         e.printStackTrace();
        }
    }
}
我怎么不能把1.txt文件复制到e盘呢,我记得输出流往文件中写东西的时候可以不用制定文件,程序会自动生成的。那我的程序运行的时候怎么出错说找不到目录呢。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
首先有一行代码要修改成
ips=new FileInputStream("d:"+File.separator+"1.txt");
因为\在""中是转义字符,或者改成
ips=new FileInputStream("d:\\1.txt");
我记得输出流应该也要加上文件名吧,反正我是加上的。
回复 使用道具 举报
本帖最后由 许涛 于 2012-5-20 20:54 编辑

文件输出流的文件存放位置,你可以不写绝对路径,默认复制到当前文件夹,但是文件名是不能省略不写的, 还有反斜杠应该写成 \\
  1. import java.io.*;
  2. public class Copy{
  3.     public static void main(String[] args) throws Exception
  4.     {
  5.         copy();
  6.     }
  7.     public static void copy(){
  8.         InputStream ips=null;
  9.         OutputStream ops=null;

  10.         try
  11.          {
  12.           ips=new FileInputStream("d:\\1.txt");
  13.          ops=new FileOutputStream("f:\\2.txt");
  14.          byte[] buf=new byte[1024];
  15.          int len=ips.read(buf);
  16.          ops.write(buf,0,len);
  17.          ips.close();
  18.          ops.close();
  19.         }
  20.         catch(Exception e)
  21.         {
  22.          e.printStackTrace();
  23.         }
  24.     }
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
复制的前提有东西给你复制,最起码要有个路径 这个是必须的  有路径了系统才会判断里面的东西,才有下面的等等···········如果你所给的东西为null,那你复制又有什么意思呢 。是吧。。所以不但要指定路径   还要判断给出路径的文件是否为空
回复 使用道具 举报
本帖最后由 杨尧 于 2012-5-20 20:57 编辑

  1. import java.io.*;
  2. public class Copy{
  3.     public static void main(String[] args) throws Exception
  4.     {
  5.         copy();
  6.     }
  7.     public static void copy(){
  8.         InputStream ips=null;
  9.         OutputStream ops=null;
  10.         try
  11.      { ips=new FileInputStream("d:\1.txt");//这里也不对头,java里\是转义字符,你想实现真正的\的话,必须\\这样才行,
  12.          ops=new FileOutputStream("f:");//这里不对,你必须写上文件名字,
  13.        ops=new FileOutputStream("f:\\1_copy.txt"); //这样才行
  14.          byte[] buf=new byte[1024];
  15.          int len=ips.read(buf);
  16.          ops.write(buf,0,len);
  17.          ips.close();
  18.          ops.close();
  19.         }
  20.         catch(Exception e)
  21.         {
  22.          e.printStackTrace();
  23.         }
  24.     }
  25. }
复制代码
回复 使用道具 举报
嗯,我查了一下API文档,看了看File,知道了separator与pathSeparator来表示路径,以后用这些更好,到哪里都可以运行。

回复 使用道具 举报
彩虹 中级黑马 2012-5-20 21:22:01
7#
         ips=new FileInputStream("d:\1.txt");
         ops=new FileOutputStream("f:");

       问题就出在这两句,首先读取流中的目录必须用双反斜杠表示,才能被编译器识别,所以第一句再加一个反斜杠符号
往输出流文件中写数据,如果 文件不存在系统是会自己创建的,这种情况针对的是FileOutputStream ops=new FileOutputStream("f:\\a.txt");在代码中有a.txt这个文件,但实际上f盘中可以事先不创建该文件,当程序执行到这一句会自动创建该文件的。毕老师的视频中讲课关于文件的复制,这句话基本就是这种形式写的,而不写的是ops=new FileOutputStream("f:");连程序中都没有该虚拟文件的存在,又怎么能提示系统自动创建该文件呢?
再说ops.write(buf,0,len);write()方法是将数组buf中的字符是一个一个的逐个写入到目的文件中的,如果你在F盘事先没有创建目的文件,在代码中也没加虚拟的目的文件,那么读到的字符该往那写呢?直接写到一打开的F盘吗?不可能,你见过在F盘下不创建任何文件载体,就能直接写字符或打字吗?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

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