zoukankan      html  css  js  c++  java
  • java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)

    https://blog.csdn.net/my__sun_/article/details/74450241

    读取文件的写法,相对路径

    在当前的目录结构中读取test.txt的有四种写法

    • 简单粗暴的 File file = new File(“src/test.txt”)
    • 使用类的相对路径
    • 使用当前线程的类加载器
    • 读取web工程下的文件 使用getRealPath()读取

    File file = new File("src/test.txt");
    File file = new File(TestRelativePath.class.getResource("/test.txt").getFile());
    File file = new File(Thread.currentThread().getContextClassLoader().getResource("test.txt").getFile());
    File file = new File(getServletContext().getRealPath("/WEB-INF/classes/test.txt"));

    下面我来一一介绍:

    简单粗暴的 File file = new File(“src/test.txt”);

      @Test
        /**
         * 这种方法 “” 空代表的是 这个Java项目 TestSomeTechnology  由于实际项目在打包后没有src目录 所以这种方法不常用
         */
        public  void  testMethod1() throws IOException{
            File file = new File("src/test.txt");
            BufferedReader br = new BufferedReader(new FileReader(file));
            String len = null;
            while ((len=br.readLine())!=null){
                System.out.println(len);
            }
        }

    使用类的相对路径

    TestRelativePath.class.getResource(“/test.txt”).getFile()

     @Test
        /**
         * 使用类的相对路径
         * 这种方法 “/” 代表的是bin。  src文件夹和resources 文件夹下的的东西都会被加载到bin下面 因为这两个文件被配置为了source
         */
        public  void  testMethod2() throws IOException{
    
            File file = new File(TestRelativePath.class.getResource("/test.txt").getFile());
            BufferedReader br = new BufferedReader(new FileReader(file));
            String len = null;
            while ((len=br.readLine())!=null){
                System.out.println(len);
            }
        }

    使用当前线程的类加载器

    Thread.currentThread().getContextClassLoader().getResource(“test.txt”).getFile()

    @Test
        /**
         * 这种是通过当前线程的类加载器
         * 这种方法 “ ” 空代表的是bin 。 于是就直接填写test,文件夹下的的东西都会被加载到bin下面,因为这两个文件被配置为了source
         */
        public  void  testMethod3() throws IOException{
    
            File file = new File(Thread.currentThread().getContextClassLoader().getResource("test.txt").getFile());
            BufferedReader br = new BufferedReader(new FileReader(file));
            String len = null;
            if ((len=br.readLine())!=null){
                System.out.println(len);
            }
        }

    读取web工程下的文件 使用getRealPath()读取

    目录如下 :

    读取 index.jsp

    @WebServlet(name = "TestServlet",urlPatterns = "/TestServlet")
    public class TestServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
        }
    
        /**
         *  web工程的根目录是 webRoot, 使用 “/” 代表webroot webroot下面有index.jsp文件
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            File file = new File(getServletContext().getRealPath("/index.jsp"));
            BufferedReader br = new BufferedReader(new FileReader(file));
            String len = null;
            while ((len=br.readLine())!=null){
                System.out.println(len);
            }
        }
    }

    读取 test.txt文件 
    不过如果想读取test.txt 的话 我们可用用上面的方式

     File file = new File(Thread.currentThread().getContextClassLoader().getResource("test.txt").getFile());

    也可以使用 getRealPath() 
    不过由于是以 webroot为根目录 我们需要从classes里面读:idea的classes等价于esclipse的classpath 。classes说明:

    代码:

    File file = new File(getServletContext().getRealPath("/WEB-INF/classes/test.txt"));

    getResourceAsStream()方法详解

    getResourceAsStream()用法与getResouce()方法一样的,用getResource()取得File文件后,再new FileInputStream(file) 与 getResourceAsStream() 的效果一样。。

     两个代码效果一样

    InputStream inputStream1 = new FileInputStream(new File(Thread.currentThread().getContextClassLoader().getResource("test.txt").getFile()));
    InputStream inputStream2 = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.txt");
  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/alsf/p/9191746.html
Copyright © 2011-2022 走看看