要想使得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类。
时间: 2024-10-24 03:49:52