Java:为什么返回null?

此代码确实返回null InputStream以及null URL.这是为什么?我有自己的类,我想获取实际的.class文件作为InputStream序列化为bytes [].

 

 

Class clazz = String.class;

String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
  String pathName = url.getPath(); System.out.println(className);
}

InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
  System.out.println(inputStream.available());
}

最佳答案

首先,您需要上下文的类加载器.其次,您需要替换圆点.在类名中使用正斜杠/并在.class扩展名后缀以标识真实路径.

 

所以这应该工作:

 

String name = String.class.getName().replace(".", "/") + ".class";
URL url = Thread.currentThread().getContextClassLoader().getResource(name);
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);

编辑:我应该添加,inputStream.available()不是了解文件大小的方法.它只是返回可读取而不会阻塞的字节数.换句话说,永远不要将返回值视为一致.如果要获取实际长度,则确实需要阅读整个流.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值