zoukankan      html  css  js  c++  java
  • java读取资源文件

      java读取资源文件正常情况下,大家都很熟悉,不比比直接贴代码。

    BufferedReader br = new BufferedReader(
                        new InputStreamReader(new FileInputStream(new File("property/e.txt")),"UTF8"));
    String line;
    while ((line = br.readLine()) != null) {
             System.out.println(line);
    }

    这只是其中的一种方式,就不展示了。顺便说一下,读取文件时,虽然FileReader涉及到编码问题的时候容易出错,代码中说:

    BufferedReader br = new BufferedReader(new FileReader("property/e.txt"));   
    String line= null;   
    while ((line= br.readLine()) != null) {   
            lines.add(newString(line.getBytes("GBK"),"UTF-8"));   //这种方式大部分中文显示正常,仍有部分汉字显示为“?”
    }   

      当把程序打包之后,在运行jar包时,上述的方式读取文件,报一个无法找到文件路径的异常。

      主要原因是因为jar包是一个单独的文件而非文件夹,绝对不可能通过"file:D:/.../打包名.jar/property/e.txt"这种形式的文件URL来定位e.txt。所以即使使用相对路径,也无法定位到jar文件内的txt文件。

      我们可以通过ClassLoader(类加载器)来加载文件,当调用jar包中的一个类时,比如FileUtil(自定义的),JVM加载进FileUtil类i,并记录这个类运行时信息。ClassLoader类中的方法可以帮助我们动态的获取这些信息

    public URL getResource(String name)   查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。并返回资源的URL对象。
    public InputStream getResourceAsStream(String name)    返回读取指定资源的输入流。这个方法很重要,可以直接获得jar包中文件的内容。
    使用方式,三种方式都可以,最终调用的都是ClassLoader类下的getResourceAsStream()这个方法
      (1)InputStream inputStream=FileUtil.class.getResourceAsStream("e.txt"); //相对路径
      (2)InputStream inputStream=FileUtil.class.getResourceAsStream("/property/e.txt");  //绝对路径
      (3) InputStream inputStream =FileUtil.class.getClassLoader().getResourceAsStream("property/e.txt");
    Class类中的方法
    public InputStream getResourceAsStream(String name) {
    name = resolveName(name);
    ClassLoader cl = getClassLoader0();
    if (cl==null) {
    // A system class.
    return ClassLoader.getSystemResourceAsStream(name);
    }
    return cl.getResourceAsStream(name);
    }
    ClassLoader类中的方法
    public InputStream getResourceAsStream(String name) {
    URL url = getResource(name);
    try {
    return url != null ? url.openStream() : null;
    } catch (IOException e) {
    return null;
    }
    }

      

  • 相关阅读:
    PyQt作品 – PingTester – 多点Ping测试工具
    关于和技术人员交流的一二三
    Pyjamas Python Javascript Compiler, Desktop Widget Set and RIA Web Framework
    Hybrid Qt applications with PySide and Django
    pyjamas build AJAX apps in Python (like Google did for Java)
    PyQt 维基百科,自由的百科全书
    InfoQ:请问为什么仍要选择Java来处理后端的工作?
    Eric+PyQt打造完美的Python集成开发环境
    python select module select method introduce
    GUI Programming with Python: QT Edition
  • 原文地址:https://www.cnblogs.com/shirandedan/p/7490473.html
Copyright © 2011-2022 走看看