您的位置:首页 > 编程语言 > Java开发

Java读取相对路径文件

2009-08-05 19:29 519 查看
[align=center]Java读取相对路径文件[/align]

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();
}

上面的执行结果是:



本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/188193
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: