黑马程序员技术交流社区

标题: IO流中的路径小问题。 [打印本页]

作者: 陈洋    时间: 2013-9-22 20:31
标题: IO流中的路径小问题。
本帖最后由 陈洋 于 2013-9-23 13:22 编辑
  1. public static void main(String[] args) {

  2.                 BufferedInputStream bis= null;
  3.                 BufferedOutputStream bos = null;
  4.                
  5.                 try {
  6.                         bis = new BufferedInputStream(new FileInputStream("1.txt"));//想问一下,为什么使用javac编译时候可以用相对路径,而使用Eclipse,就不行了,放到.java或者.class下,相对路径都不同
  7.                         bos = new BufferedOutputStream(new PrintStream(System.out));
  8.                         
  9. //                        定义一个字节数组
  10.                         byte[] by = new byte[1024];
  11.                         int len = 0;
  12.                         
  13. //                        每次读取一个字节数组长度
  14.                         while((len=bis.read(by))!=-1){
  15.                                 
  16. //                                写入到输出流中
  17.                                 bos.write(by, 0, len);
  18.                                 bos.flush();
  19.                         }
  20.                         
  21.                 } catch (IOException e) {
  22.                         
  23.                         throw new RuntimeException("内容打印失败");
  24.                         
  25.                 }finally{
  26.                         
  27. //                        关闭读取流
  28.                         try{
  29.                                 if(bis!=null)
  30.                                         bis.close();
  31.                         }catch (IOException e) {
  32.                                 throw new RuntimeException("输入流关闭失败");
  33.                         }
  34.                         
  35. //                        关闭输出流
  36.                         try{
  37.                                 if(bos!=null)
  38.                                         bos.close();
  39.                         }catch (IOException e) {
  40.                                 throw new RuntimeException("输出流关闭失败");
  41.                         }
  42.                 }
  43.         }
复制代码
问题在代码中
作者: 陈洋    时间: 2013-9-22 20:33
运行时,报文件找不到异常。
作者: 胡智    时间: 2013-9-22 21:00
都能用相对路径,只是你Eclipse目录找错了。
给你举个例子,这才是相对路径的目录

dizhi.png (28.62 KB, 下载次数: 24)

dizhi.png

daima.png (23.09 KB, 下载次数: 28)

daima.png

作者: 陈洋    时间: 2013-9-22 21:08
胡智 发表于 2013-9-22 21:00
都能用相对路径,只是你Eclipse目录找错了。
给你举个例子,这才是相对路径的目录 ...

是放到项目下的啊,那么如果访问的是src下的,怎么访问,我用绝对路径访问不了。

作者: 胡智    时间: 2013-9-22 21:20
陈洋 发表于 2013-9-22 21:08
是放到项目下的啊,那么如果访问的是src下的,怎么访问,我用绝对路径访问不了。
...

还是那个例子,我把文件放到src文件夹里面了

daima.png (80.13 KB, 下载次数: 30)

daima.png

作者: 风叶漂    时间: 2013-9-22 22:45
相对路径是不是对项目所在的文件夹(本例中的trfficlamp)来说,如果源文件不在项目所在的文件夹(本例中的trfficlamp)就只能使用绝对路径这样说不知对不对
作者: yting_xmei1129    时间: 2013-9-22 23:54
楼主,饿昨天刚发表了一篇关于路径的blog,你应该没看到,下面是源代码--->

下面是源代码,先把注释去掉就可以看到运行效果了、、、

package com.yting.readfile;

import java.io.*;

//使用相对路径获取文件的心得
public class ReadFileDemo {

public static void main(String[] args) throws Exception {
  String filepath1 = "resource1.txt";
  String filepath2 = "resource2.txt";
  String filepath3 = "resource3.txt";
  
  //普通方式使用相对路径获取文件
  FileInputStream fis1 = new FileInputStream(filepath1);
  //FileInputStream fis2 = new FileInputStream(filepath2);   
  //FileInputStream fis3 = new FileInputStream(filepath3);     
  System.out.println(fis1.read());
  //System.out.println(fis2.read());   // java.io.FileNotFoundException: resource2.txt
  //System.out.println(fis3.read());   // java.io.FileNotFoundException: resource3.txt
  
  //总结1 : fis2 跟 fis3 会报告 java.io.FileNotFoundException 文件未发现异常
  //这种普通的方式使用相对路径获取文件的相对目录是工程名ReadFile
  
  
  //类加载器获取文件方式之 1
  //InputStream is1 = ReadFileDemo.class.getClassLoader().getResourceAsStream(filepath1);
  //InputStream is2 = ReadFileDemo.class.getClassLoader().getResourceAsStream(filepath2);
  InputStream is3 = ReadFileDemo.class.getClassLoader().getResourceAsStream(filepath3);
  //System.out.println(is1.read());   //java.lang.NullPointerException
  //System.out.println(is2.read());   //java.lang.NullPointerException
  System.out.println(is3.read());
  
  //总结2: is2 跟 is3 会报告 java.lang.NullPointerException 空指针异常
  //这种使用类加载器获取文件的话相对目录是类的根目录,从这里看的话是src目录,被编译过后的目录名
  //叫做bin
  
  //类加载器获取文件方式之 2
  //InputStream iss1 = ReadFileDemo.class.getResourceAsStream(filepath1);
  InputStream iss2 = ReadFileDemo.class.getResourceAsStream(filepath2);
  //InputStream iss3 = ReadFileDemo.class.getResourceAsStream(filepath3);
  //System.out.println(iss1.read());   //java.lang.NullPointerException
  System.out.println(iss2.read());
  //System.out.println(iss3.read());   //java.lang.NullPointerException
  
  //总结3: iss1 跟 iss 3 会报告  java.lang.NullPointerException 空指针异常
  //这种使用类加载器获取文件的话相对目录是这个ReadFileDemo.java类所在的目录
  //也就是这个 ReadFile/src/com/yting/readfile 目录
  
  //以上为相对目录读取文件的方式,绝对路径的话大家都懂的,不解释了 - - !
  //初学者看下可以少走弯路,个人经验,分享一下、、、
  //The you smile until forever、、、、、、、、、、、、、、、、、、、、、
}

}

希望可以帮到楼主,基本的饿都总结出来了
作者: 曹秀云    时间: 2013-9-23 11:05
注意包名的那个问题。我当时入学测试第一天上午下载做的剩下一个就是纠结在路径上了,你定义的包名,比如com.itheima写的时候应该这样写src\\com\\itheima\\copy1.txt 。
作者: 陈洋    时间: 2013-9-23 13:24
胡智 发表于 2013-9-22 21:20
还是那个例子,我把文件放到src文件夹里面了

放到src目录下,可以用相对路径吗?{:soso_e100:}

作者: 胡智    时间: 2013-9-23 14:51
陈洋 发表于 2013-9-23 13:24
放到src目录下,可以用相对路径吗?

相对路径,就是相对于你安装软件配置的路径。只要你有参照物,可以用相对路径的。
其中“..”指的是返回上一级目录。

dizhi.png (111.73 KB, 下载次数: 24)

dizhi.png

3.png (111.39 KB, 下载次数: 25)

3.png

daima.png (102.21 KB, 下载次数: 24)

daima.png





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