java从磁盘读文件为什么会有2种读法,该怎么处理

java从磁盘读文件为什么会有2种读法1, 从当前程序的根目录找比如你的程序: abc.jar那么就从abc.jar 所在目

java从磁盘读文件为什么会有2种读法
1, 从当前程序的根目录找 
比如你的程序: abc.jar
那么就从abc.jar 所在目录找文件.

2, 从当前程序的bin下找. (如果在eclipse下运行 那么他就从bin目录下找这个文件)
比如你的程序: abc.jar
那么就从abc.jar 这个jar包里面找.
-----------------

要我自己写程序的话 一般都强行让自己 写成第1种的方式.
因为这样简洁明朗. 完全隔离 程序文件 与 配置文件

但是接手他人的项目后发现很多人用了第2种方式.
而我在eclipse调试的时候没发现问题.因为eclipse直接从 bin目录下找文件了.

但是打成jar之后 却发现找不到文件了.

为了解决这个问题我尝试把 所有配置分别在 jar包里 以及jar包外分别放了1份. 但是根本不解决问题.

这样的问题怎么办?


[解决办法]
把所有的jar配置到eclipse的classpath里么,导出的时候注意把所有的资源都导出。
[解决办法]
把所有的jar复制,粘贴到web-inf/lib下。
[解决办法]
你说的第一种方式,是从通过指定文件目录来寻找。
比如你这么定义文件的时候:File file = new File("abc.txt");
没有指定目录,则为当前目录。
而第二种方式,是从classpath中查找。
比如:InputStream is = this.getClass().getResourceAsStream("/abc.txt");
是在所有的classpath中查找abc.txt。
与你的想法相反,胡搅蛮缠的,是第一种方式。因为当前目录是不随时变化的,而classpath是可以通过启动脚本去定义的。另外,并不是一定要把要用的文件放到bin里,一般是将配置文件放到比如说叫做config的目录中,然后将这个目录添加到classpath里。
[解决办法]
参考代码

Java code
package test;import java.io.*;import java.util.*; public class FileReadWrite { /**  * 描述:readFile  *   * @param dir  * @return  * @throws IOException  * @CreateOn Jul 28, 2008 2:16:23 PM  * @author chun_chang  */ public StringBuffer readFile(String dir) throws IOException {  StringBuffer buffer = null;  try {   buffer = new StringBuffer();   InputStream fis = new FileInputStream(dir);   BufferedReader reader = new BufferedReader(new InputStreamReader(fis));   String line = null;// 用来保存每行读取的内容   line = reader.readLine(); // 读取第一行   while (line != null) { // 如果 line 为空说明读完了    buffer.append(line); // 将读到的内容添加到 buffer 中    buffer.append("/n"); // 添加换行符    line = reader.readLine(); // 读取下一行   }   System.out.println(buffer); // 将读到 buffer 中的内容写出来   fis.close();  } catch (FileNotFoundException e) {   e.printStackTrace();  }  return buffer; }