随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

使用ClassLoader获取的文件位置1(包外):

 

 

 代码:

复制代码
package demo1;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取类路径下的资源
 */
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 得到ClassLoader
        ClassLoader clazz = this.getClass().getClassLoader();
        // 调用getResourceAsStream(),得到一个InputStream输入流
        InputStream input = clazz.getResourceAsStream("a.txt");
        // 读取输入流中的内容并保存在byte[]数组中
        byte[] data = input.readAllBytes();
        // 打印
        System.out.println("a.txt : \n" + new String(data,0,data.length));
        input.close(); // 关闭流
    }
}
复制代码

打印结果:

使用ClassLoader获取的 文件位置2(包内):

代码:

复制代码
package demo1;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取类路径下的资源
 */
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 得到ClassLoader
        ClassLoader clazz = this.getClass().getClassLoader();
        // 调用getResourceAsStream(),得到一个InputStream输入流
//        InputStream input = clazz.getResourceAsStream("a.txt");
        InputStream input = clazz.getResourceAsStream("demo1/b.txt");
        // 读取输入流中的内容并保存在byte[]数组中
        byte[] data = input.readAllBytes();
        // 打印
//        System.out.println("a.txt : \n" + new String(data,0,data.length));
        System.out.println("b.txt : \n" + new String(data,0,data.length));
        input.close(); // 关闭流
    }
}
复制代码

打印结果:

 使用Class获取的文件位置(包内):

 

 

复制代码
package demo1;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取类路径下的资源
 */
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 得到ClassLoader
        Class clazz = this.getClass();
        
        InputStream input = clazz.getResourceAsStream("b.txt");    // 相对当前类(AServlet)的所在目录
        // 读取输入流中的内容并保存在byte[]数组中
        byte[] data = input.readAllBytes();
        // 打印
        System.out.println("b.txt : \n" + new String(data,0,data.length));
        input.close(); // 关闭流
    }
}
复制代码

 

使用Class就相当于从类当前目录读取,此时读取包外的文件就会报错,那么此时想要读取包外的文件应该怎么做?

 

Class读取文件位置2(包外):

 代码:

 

复制代码
package demo1;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取类路径下的资源
 */
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 调用getResourceAsStream(),得到一个InputStream输入流
        InputStream input = clazz.getResourceAsStream("/a.txt");    // 相对当前类(AServlet)的所在目录
        // 读取输入流中的内容并保存在byte[]数组中
        byte[] data = input.readAllBytes();
        System.out.println("a.txt : \n" + new String(data,0,data.length));
        input.close(); // 关闭流
    }
}
复制代码

 

打印结果:

 

所以只需要加上一个" / "就行了,不加 / 是相对当前类所在目录,加上就相对classes所在路径。

下面的文件夹:

 

相当于这个:

 

因为它们的内容一样:

可以推断,classes文件夹是一个存放编译文件的文件夹。

因为里面存放了.class编译后的文件:

 

 

posted on   时间完全不够用啊  阅读(166)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示