从jar包内复制文件到系统目录内

简介: 从jar包内复制文件到系统目录内

需求


     最近想实现一个java执行shell脚本的小demo,其实执行的一条命令是比较容易的,一百度一大堆;执行脚本也特别简单,参数为路径即可,但是有没有想过下面的这种情况?


     你想执行一个名字叫 helloword.sh脚本,你的脚本放在 /opt下,你在自己的SpringBoot代码运行shell的命令的参数为/opt/ helloword.sh ,你的代码在自己的服务上跑的美滋滋,但是你的代码跑到别人服务器上,那你怎么能保证别人的/opt下有你的helloword.sh  ???


   其实比较简单的方法就是我在的SpringBoot的resources目录下放置helloworld.sh,如果jar包启动的时候,能把该helloword.sh复制到当前linux操作系统我规定的目录下,我这个问题就解决了。


代码实现


源码


https://github.com/cbeann/Demooo/tree/master/springboot-demo-copy


项目介绍


SpringBoot项目,secret.txt文件的位置如下图所示


11.png


核心代码


pom.xml


 <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.8.0</version>
        </dependency>


runner:项目启动后调用实现CommandLineRunner接口的实现类


package com.example.springbootdemocopy.runner;
import com.example.springbootdemocopy.App;
import org.apache.commons.io.FileUtils;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
/**
 * @author chaird
 * @create 2020-10-12 20:41
 */
@Component
public class CopyRunner implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
    // window();//window上复制文件
    linux(); // linux上复制文件
  }
  /** 在window系统上把resources下的myfile/secret.txt文件复制到xxx */
  public void linux() throws Exception {
    InputStream inputStream = App.class.getClassLoader().getResourceAsStream("myfile/secret.txt");
    // 获得的系统的根目录
    File fileParent = new File(File.separator);
    /// opt/secret_linux.txt
    File targetFile = new File(fileParent, "/opt/secret_linux.txt");
    if (targetFile.exists()) {
      targetFile.delete();
    }
    targetFile.createNewFile();
    // 使用common-io的工具类即可转换
    FileUtils.copyToFile(inputStream, targetFile);
    // 记得关闭流
    inputStream.close();
  }
  /** 在window系统上把resources下的myfile/secret.txt文件复制到D:\others\temp\temp\secret_win.txt目录下 */
  public void window() throws Exception {
    String sourceFileName = "myfile/secret.txt";
    ClassPathResource classPathResource = new ClassPathResource(sourceFileName);
    InputStream inputStream = classPathResource.getInputStream();
    String targetFileName = "D:\\others\\temp\\temp\\secret_win.txt";
    // 获得的系统的根目录
    File targetFile = new File(targetFileName);
    if (targetFile.exists()) {
      targetFile.delete();
    }
    targetFile.createNewFile();
    // 使用common-io的工具类即可转换
    FileUtils.copyToFile(inputStream, targetFile);
    // 记得关闭流
    inputStream.close();
  }
}
目录
相关文章
|
6月前
|
Java Linux Shell
linux自动部署jar包,注册系统服务(基于Centos7)
linux自动部署jar包,注册系统服务(基于Centos7)
223 0
|
Java Linux
【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序
【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序
283 0
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
76 0
|
2月前
|
Java
jar包目录介绍
jar包目录介绍
28 2
|
3月前
|
Java Windows
【Azure 应用服务】App Service 部署txt静态文件和Jar包在不同目录中的解决办法
【Azure 应用服务】App Service 部署txt静态文件和Jar包在不同目录中的解决办法
|
3月前
|
Java Docker 容器
pandora boot热点应用探索问题之使用目录形态压缩jar包的问题如何解决
pandora boot热点应用探索问题之使用目录形态压缩jar包的问题如何解决
|
6月前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
235 1
|
Java 关系型数据库 MySQL
【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行
【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行
353 0
|
Java Linux
linux系統java后台启动,liunx杀死java进程,后台启动jar包
linux系統java后台启动,liunx杀死java进程,后台启动jar包
94 0
|
Java 微服务 Spring
Spring Boot jar文件瘦身--把单一Spring Boot jar文件,分离为依赖组件lib目录和一个业务jar来进行部署,优化单个jar文件大小到一两百KB。
假如有十来个微服务需要部署,那就意味着需要传输一两个GB的文件,耗时可想而知。就算是单一更新个别微服务也需要传输一两百MB。因此,为了方便下次jar文件部署更新及瘦身,顺便记录下:
Spring Boot jar文件瘦身--把单一Spring Boot jar文件,分离为依赖组件lib目录和一个业务jar来进行部署,优化单个jar文件大小到一两百KB。