java字符流转换成文件名_Java读取相对路径文件 &InputStream转换为String

核心提示: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值