要想使得web项目可以访问引用的Java Project中的资源,需要在Java Project中,将需要的IO操作的文件都放置到src目录下
法一
在Java Project中,有IO操作的类需要这样写
package cn.edu.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Writer {
public static void main(String[] args) throws IOException {
System.out.println(read());
}
public static String read() {
// resource/a/b/test.txt在src目录下
InputStream resourceAsStream = Writer.class.getClassLoader().getResourceAsStream("resource/a/b/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(resourceAsStream));
String readLine = null;
try {
readLine = br.readLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(readLine);
return readLine;
}
}
|
但是这种方法有一定的局限性,比如拿到路径之后获取到的返回值是一个InputStream输入流的对象,当我们使用Apache commons-io这个强大的IO包来操作文件时,该包中的方法接收的参数都是String类型的路径,而不是输入流对象。所以该方法不便于使用
commons-io包。
法二
同样是在Java Project中的类,如果有IO操作,需要这样写
package cn.edu.test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class Writer {
public static void main(String[] args) throws IOException {
System.out.println(read());
}
public static String read() {
// resource/a/b/test.txt存放在src目录下
String path = Writer.class.getClassLoader().getResource("").getPath();
path += "resource/a/b/test.txt";
System.out.println(path);
String readFileToString = null;
try {
readFileToString = FileUtils.readFileToString(new File(path));
} catch (IOException e) {
e.printStackTrace();
}
return readFileToString;
}
}
|
但是这种方法也有一定的局限性,如果使用这种方式,你需要将Java Project中src目录下使用到的资源文件,原样拷贝到Web Project中的src目录下,但是使用这种方式获取的返回值就是String类型的路径名,之后可以使用强大的commons-io包了,比如FileUtils类
。