分享

Java读取相对路径文件 &InputStream转换为String

 连元武 2011-09-23

核心提示:Java读取相对路径文件是的前提也是相对的:文件必须位于classpath下面,否则随便一个相对文件是没法读取的。

Java读取相对路径文件是的前提也是相对的:文件必须位于classpath下面,否则随便一个相对文件是没法读取的。

用IDE创建一个工程,一般都会有一个src的目录,这个src就是工程的classpath目录了,只要在src目录或其子目录下的文件,在程序代码中都可以使用相对路径的方式来读取,这里的相对路径和文件系统的相对路径概念上也许有点差异。

 举例来说:

public class XmlTest{

        private String inputStreamToString(InputStream is, String encoding) {
     try {
          byte[] b = new byte[1024];
          String res = "";
          if (is == null) {
                 return "";
          }
         
          int bytesRead = 0;
          while (true) {
              bytesRead = is.read(b, 0, 1024); // return final read bytes counts
              if (bytesRead == -1) {// end of InputStream
                     return res;
              }
              res += new String(b, 0, bytesRead, encoding); // convert to string using bytes
           }
       } catch (Exception e) {
             e.printStackTrace();
             System.out.print("Exception: " + e);
             return "";
       }
 }
    public static String genWscmd(String xmlfilename) {
           InputStream in = XmlTest.class.getClassLoader().getResourceAsStream(xmlfilename);
           String x = new XmlTest().inputStreamToString(in, "UTF-8");
           return x;
   }

        public static void main(String[] args) {

                String out = genWscmd("sys_ds.xml");

                System.out.println(out);

        }

}

 

1、sys_ds.xml位于src下,路径直接写其名字。但千万别写成“/sys_ds.xml”了,这是错误的,会被认为是绝对路径。

 

2、将文件sys_ds.xml移动到mypack包下面,则路径应该写为:mypack/sys_ds.xml,前面还是没有“/”,这点要注意。

 

3、必须通过ClassLoader来执行getResourceAsStream()方法。获取ClassLoader有两种方式:

        InputStream in = TestRead.class.getClassLoader().getResourceAsStream(xmlfilename);

        InputStream in = new TestRead().getClass().getClassLoader().getResourceAsStream(xmlfilename);

 

4、将一个流转换为字符串的实现如下:

 

        /**

         * 读取输入流为一个内存字符串,保持文件原有的换行格式

         *

         * @param in            输入流

         * @param charset 文件字符集编码

         * @return 文件内容的字符串

         */

        public static String file2String(InputStream in, String charset) {

                StringBuffer sb = new StringBuffer();

                try {

                        LineNumberReader reader = new LineNumberReader(new BufferedReader(new InputStreamReader(in, charset)));

                        String line;

                        while ((line = reader.readLine()) != null) {

                                sb.append(line).append(System.getProperty("line.separator"));

                        }

                        reader.close();                        

                } catch (UnsupportedEncodingException e) {

                        log.error("读取文件为一个内存字符串失败,失败原因是使用了不支持的字符编码" + charset, e);

                } catch (IOException e) {

                        log.error("读取文件为一个内存字符串失败,失败原因是读取文件异常!", e);

                }

                return sb.toString();

        }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多