复制JAR包中的文件到磁盘
来源:互联网 发布:有域名了怎么注册邮箱 编辑:程序博客网 时间:2024/04/27 21:49
用MyEclipse写的代码,并在MyEclipse中运行成功后,用MyEclipse中的Export将项目打成自动运行的JAR包,但在运行JAR包时出现了问题,无法找到模板ACCESS文件,复制失败。
究其原因,在Eclipse中项目是以有组织的文件夹形式存放在磁盘上,我们不管是通过绝对路径还是相对路径可以找到相应文件并完成读取,发布成JAR包后,JAR包是一个单独的文件而非文件夹,绝对不可能通过"E:/.../backup.jar/resource/Archive.mdb"这种形式的文件URL来定位文件,即使是相对路径,也无法定位到JAR文件内的资源文件。
首先,需要解决的是:无论JAR包文件放在系统中的什么位置,通过程序都能定位到JAR包中资源文件。
我们可以用类装载器(ClassLoader)来做到这一点:ClassLoader 是类加载器的抽象类。它可以在运行时动态的获取加载类的运行信息。 可以这样说,当我们调用JAR中的某个类时,JVM加载进这个类,并记录下类运行时信息(包括所在jar包的路径信息)。幸运的是ClassLoader类中的两个静态方法可以帮助我们获取这些信息:
● public static URL getSystemResource(String name);
查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。并返回资源的URL对象。
● public static InputStream getResourceAsStream(String name);
返回读取指定资源的输入流。
这两个方法中的参数都是相对于CLASSPATH的路径,其中第二个方法getResourceAsStream(name),可以让我们直接读取到JAR包中文件的内容。接下来就用它来读取资源文件。
资源定位问题解决了,接下来只需要解决将读取出来的InputStream输入流写入文件就可以了。
完整代码如下:
/** * 从JAR中复制文件到磁盘 * @param srcFilePath:源路径,既JAR包中的资源文件,路径相对于CLASSPATH * @param destFilePath:目标路径,磁盘上的任意路径,绝对路径(一般为用户选择的文件夹路径) * @return int:返回执行后的状态;0:失败;1:成功;(可以扩充其它状态) */public static int fileCopy(String srcFilePath, String destFilePath){int flag = 0;File destFile = new File(destFilePath);try {BufferedInputStream fis = new BufferedInputStream(ClassLoader.getSystemResourceAsStream(srcFilePath));FileOutputStream fos = new FileOutputStream(destFile);byte[] buf = new byte[1024];int c = 0;while ((c = fis.read(buf)) != -1) {fos.write(buf, 0, c);}fis.close();fos.close();flag = 1;} catch (IOException e) {e.printStackTrace();}return flag;}
- 复制JAR包中的文件到磁盘
- 从jar 包中读取文件,并且复制到jar包的目录中
- 将Jar包中的文件拷贝到本地文件
- maven复制jar包到本地仓库
- 复制jar包到eclipse报错
- 用C#复制文件到另一磁盘
- 远程桌面复制文件到本地磁盘
- 读取jar包中的文件
- 更新Jar包中的文件
- jar包中的声明文件
- 搜索jar包中的文件
- 查找jar包中的文件
- 修改jar包中的文件
- 设置一个目录中的jar包到classpath中,并且执行一个jar文件
- 使用ant.jar 解压文件 把asset文件夹中的内容复制到SD卡上
- jar导包先是复制到了lib文件下下面,为什么又要再导入到libraries里面
- Spring-boot 微服务jar包方式启动,获取jar内资源文件到本地磁盘
- 读取jar包中的properties文件
- Ubuntu eclipse svn设置
- C语音混合运算规则
- 世界上最难受的事情莫过于公司让你自己给自己写规划!
- 关于Java中环境变量的作用
- SQL Server 索引结构及其使用
- 复制JAR包中的文件到磁盘
- 分数模运算几种方法总结
- 通用寄存器的主要用途
- Android Partitions Explained: boot, system, recovery, data, cache & misc
- 邮箱激活用户
- ADO,OLEDB,ODBC,DAO的区别
- mysql
- Android待机锁屏流程分析
- 谷歌彩蛋-让搜索结果页面下雪、旋转、倾斜