黑马程序员技术交流社区

标题: 关于目录的问题 [打印本页]

作者: 凡延海    时间: 2012-5-20 20:24
标题: 关于目录的问题
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盘呢,我记得输出流往文件中写东西的时候可以不用制定文件,程序会自动生成的。那我的程序运行的时候怎么出错说找不到目录呢。
作者: 胥江    时间: 2012-5-20 20:45
首先有一行代码要修改成
ips=new FileInputStream("d:"+File.separator+"1.txt");
因为\在""中是转义字符,或者改成
ips=new FileInputStream("d:\\1.txt");
我记得输出流应该也要加上文件名吧,反正我是加上的。
作者: 许涛    时间: 2012-5-20 20:49
本帖最后由 许涛 于 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. }
复制代码

作者: Fc10232    时间: 2012-5-20 20:51
复制的前提有东西给你复制,最起码要有个路径 这个是必须的  有路径了系统才会判断里面的东西,才有下面的等等···········如果你所给的东西为null,那你复制又有什么意思呢 。是吧。。所以不但要指定路径   还要判断给出路径的文件是否为空
作者: 8161776    时间: 2012-5-20 20:53
本帖最后由 杨尧 于 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. }
复制代码

作者: 凡延海    时间: 2012-5-20 20:59
嗯,我查了一下API文档,看了看File,知道了separator与pathSeparator来表示路径,以后用这些更好,到哪里都可以运行。


作者: 彩虹    时间: 2012-5-20 21:22
         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盘下不创建任何文件载体,就能直接写字符或打字吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2