Java读取相对路径文件

Java读取相对路径文件是的前提也是相对的:文件必须位于classpath下面,否则随便一个相对文件是没法读取的。
 
用IDE创建一个工程,一般都会有一个src的目录,这个src就是工程的classpath目录了,只要在src目录或其子目录下的文件,在程序代码中都可以使用相对路径的方式来读取,这里的相对路径和文件系统的相对路径概念上也许有点差异。
 
举例来说:
public  class TestRead { 

         public  static String genWscmd(String xmlfilename) { 
                InputStream in = TestRead. class.getClassLoader().getResourceAsStream(xmlfilename); 
                String x = StringFileToolkit.file2String(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(); 
        } 
 
 
上面的执行结果是:


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/188193,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值