有些时候我们需要读取并释放jar包内文件到jar包外。这样其实很简单,使用InputStream和OutputStream即可。
文件在jar包中时,一般是先读取他们,再输出。以我这里为例:
(资料图片仅供参考)
可以看到我这里的代码文件目录结构,代码文件夹根目录下有一个a.txt,还有一个test文件夹,其中有一个Test类和b.txt,sda.pdf。
打包为jar后结构不变,如下:
InputStreamis=Test.class.getResourceAsStream("sda.pdf");//流式读取jar包内文件,使用classpathFilef=newFile("E:\\中转\\tio\\a\\out.pdf");//指定输出文件Filefp=newFile(f.getParent);//输出文件的父目录if(!fp.exists){//父目录不存在时先创建fp.mkdirs;}if(!f.exists){//文件不存在时先创建f.createNewFile;}OutputStreamos=newFileOutputStream(f);//创建输出流intindex=0;//当前读取的位数byte[]bytes=newbyte[1024];//指定每次读取的位数,这里以1024为例//开始读取文件,一遍读取一边输出文件。每次读取1024的长度并储存于bytes这个数组中,然后写入至目标文件while((index=is.read(bytes))!=-1){os.write(bytes,0,index);//输出文件,write方法参数分别为:写入的数据、开始写入的位置(0为从开头写入),写入长度}//关闭流并保存文件os.flush;os.close;is.close;复制代码
这就是流式读取文件,其语法是:
InputStreamis=类名.class.getResourceAsStream("文件路径");复制代码
这里因为是读取jar内的文件,所以路径用classpath方式表示。上面的Test.class.getResourceAsStream就是以Test这个类的位置为出发点。括号里面的参数就是在jar包中,以Test类为准的相对路径。
当然也可以使用绝对路径。文件路径以/开头的就是绝对路径,绝对路径不再是以类为出发点,/就代表jar包的根目录。
举个例子,如果要读取上述jar包内根目录下的a.txt,那就要这样写:
InputStreamis=Test.class.getResourceAsStream("/a.txt");复制代码
这时就是以绝对路径方式找到文件。虽然指定了Test.class,但是因为是绝对路径,路径就与Test类无关了。
关键词:
有些时候我们需要读取并释放jar包内文件到jar包外。这样其实很简单,使用InputStream和OutputStream即可。文件在jar包中时,一般是先读取
巴菲特在制造业的投资个案不多,其中最大的一笔投资是2015年伯克希尔哈撒韦公司(BerkshireHathaway)以370亿美元约20多倍市盈率全资收购了美
截至2023年1月10日收盘,中汽股份(301215)报收于5 44元,上涨2 26%,换手率4 34%,成交量11 97万手,成交额6432 51万元。
一座建筑,不仅是人们的活动空间,更是建造者对美好生活的寄予和憧憬。一座有温度的建筑,才能打磨出温暖的生活,在对建筑夜以继日的打磨完善