在Java中操作文件Hutool-FileUtil以及SystemCommand

最近在做的项目,都是跟文件打交道的,有的是copy文件,有的是压缩文件,有的是写文件,等等吧

首先是,将jar包中resources下的压缩工具复制到项目启动目录下
获取启动目录,可以通过这个获取

System.getProperty("user.dir")

想知道都能获取哪些系统参数,可以如下

Properties properties = System.getProperties();
Set<String> propertyNames = properties.stringPropertyNames();
for (String propertyName : propertyNames) {
	String property = properties.getProperty(propertyName);
    System.out.println(propertyName + "=" + property);
}

执行结果如下

java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\java\jdk1.8.0_371\jre\bin
java.vm.version=25.371-b11
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D:\workspace\workspace_demo\validated
java.runtime.version=1.8.0_371-b11
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\java\jdk1.8.0_371\jre\lib\endorsed
os.arch=amd64
java.io.tmpdir=D:\UserData\Temp\
line.separator=
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 10
sun.jnu.encoding=GBK
java.library.path=D:\java\jdk1.8.0_371\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;D:\java\jdk1.8.0_371\bin;D:\TortoiseGit\bin;D:\Git\cmd;D:\software\mysql_5.7.31\bin;D:\apache-maven-3.6.3\bin;D:\TortoiseSVN\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\software\nodejs\;D:\software\nodejs\node_global;D:\gradle-8.3\bin;;D:\java\jdk1.8.0_371\bin;C:\Users\miaoxm\AppData\Local\Microsoft\WindowsApps;C:\Users\miaoxm\AppData\Roaming\npm;.
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.0
user.home=C:\Users\miaoxm
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=miaoxm
java.class.path=D:\java\jdk1.8.0_371\jre\lib\charsets.jar;D:\java\jdk1.8.0_371\jre\lib\deploy.jar;D:\java\jdk1.8.0_371\jre\lib\ext\access-bridge-64.jar;D:\java\jdk1.8.0_371\jre\lib\ext\cldrdata.jar;D:\java\jdk1.8.0_371\jre\lib\ext\dnsns.jar;D:\java\jdk1.8.0_371\jre\lib\ext\jaccess.jar;D:\java\jdk1.8.0_371\jre\lib\ext\jfxrt.jar;D:\java\jdk1.8.0_371\jre\lib\ext\localedata.jar;D:\java\jdk1.8.0_371\jre\lib\ext\nashorn.jar;D:\java\jdk1.8.0_371\jre\lib\ext\sunec.jar;D:\java\jdk1.8.0_371\jre\lib\ext\sunjce_provider.jar;D:\java\jdk1.8.0_371\jre\lib\ext\sunmscapi.jar;D:\java\jdk1.8.0_371\jre\lib\ext\sunpkcs11.jar;D:\java\jdk1.8.0_371\jre\lib\ext\zipfs.jar;D:\java\jdk1.8.0_371\jre\lib\javaws.jar;D:\java\jdk1.8.0_371\jre\lib\jce.jar;D:\java\jdk1.8.0_371\jre\lib\jfr.jar;D:\java\jdk1.8.0_371\jre\lib\jfxswt.jar;D:\java\jdk1.8.0_371\jre\lib\jsse.jar;D:\java\jdk1.8.0_371\jre\lib\management-agent.jar;D:\java\jdk1.8.0_371\jre\lib\plugin.jar;D:\java\jdk1.8.0_371\jre\lib\resources.jar;D:\java\jdk1.8.0_371\jre\lib\rt.jar;D:\workspace\workspace_demo\validated\target\classes;D:\maven_lib\org\springframework\boot\spring-boot-starter\2.3.5.RELEASE\spring-boot-starter-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\boot\spring-boot\2.3.5.RELEASE\spring-boot-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\boot\spring-boot-autoconfigure\2.3.5.RELEASE\spring-boot-autoconfigure-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-logging\2.3.5.RELEASE\spring-boot-starter-logging-2.3.5.RELEASE.jar;D:\maven_lib\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\maven_lib\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\maven_lib\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\maven_lib\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\maven_lib\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\maven_lib\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\maven_lib\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;D:\maven_lib\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\maven_lib\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\maven_lib\org\springframework\spring-core\5.2.10.RELEASE\spring-core-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-jcl\5.2.10.RELEASE\spring-jcl-5.2.10.RELEASE.jar;D:\maven_lib\org\hibernate\validator\hibernate-validator\6.1.6.Final\hibernate-validator-6.1.6.Final.jar;D:\maven_lib\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\maven_lib\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\maven_lib\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\maven_lib\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-web\2.3.5.RELEASE\spring-boot-starter-web-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-json\2.3.5.RELEASE\spring-boot-starter-json-2.3.5.RELEASE.jar;D:\maven_lib\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;D:\maven_lib\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;D:\maven_lib\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-tomcat\2.3.5.RELEASE\spring-boot-starter-tomcat-2.3.5.RELEASE.jar;D:\maven_lib\org\apache\tomcat\embed\tomcat-embed-core\9.0.39\tomcat-embed-core-9.0.39.jar;D:\maven_lib\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\maven_lib\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.39\tomcat-embed-websocket-9.0.39.jar;D:\maven_lib\org\springframework\spring-web\5.2.10.RELEASE\spring-web-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-beans\5.2.10.RELEASE\spring-beans-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-webmvc\5.2.10.RELEASE\spring-webmvc-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-aop\5.2.10.RELEASE\spring-aop-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-expression\5.2.10.RELEASE\spring-expression-5.2.10.RELEASE.jar;D:\maven_lib\mysql\mysql-connector-java\8.0.22\mysql-connector-java-8.0.22.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-thymeleaf\2.3.5.RELEASE\spring-boot-starter-thymeleaf-2.3.5.RELEASE.jar;D:\maven_lib\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;D:\maven_lib\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;D:\maven_lib\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;D:\maven_lib\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;D:\maven_lib\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;D:\maven_lib\com\aliyun\ccc20200701\2.8.3\ccc20200701-2.8.3.jar;D:\maven_lib\com\aliyun\tea-util\0.2.16\tea-util-0.2.16.jar;D:\maven_lib\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;D:\maven_lib\com\aliyun\tea-openapi\0.2.8\tea-openapi-0.2.8.jar;D:\maven_lib\com\aliyun\credentials-java\0.2.4\credentials-java-0.2.4.jar;D:\maven_lib\org\ini4j\ini4j\0.5.4\ini4j-0.5.4.jar;D:\maven_lib\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;D:\maven_lib\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;D:\maven_lib\com\sun\xml\bind\jaxb-core\2.3.0\jaxb-core-2.3.0.jar;D:\maven_lib\com\sun\xml\bind\jaxb-impl\2.3.0\jaxb-impl-2.3.0.jar;D:\maven_lib\com\aliyun\alibabacloud-gateway-spi\0.0.1\alibabacloud-gateway-spi-0.0.1.jar;D:\maven_lib\com\aliyun\tea-xml\0.1.5\tea-xml-0.1.5.jar;D:\maven_lib\org\dom4j\dom4j\2.0.3\dom4j-2.0.3.jar;D:\maven_lib\org\jacoco\org.jacoco.agent\0.8.4\org.jacoco.agent-0.8.4-runtime.jar;D:\maven_lib\com\aliyun\endpoint-util\0.0.7\endpoint-util-0.0.7.jar;D:\maven_lib\com\aliyun\tea\1.2.0\tea-1.2.0.jar;D:\maven_lib\com\squareup\okhttp3\okhttp\3.14.9\okhttp-3.14.9.jar;D:\maven_lib\com\squareup\okio\okio\1.17.2\okio-1.17.2.jar;D:\maven_lib\com\aliyun\openapiutil\0.2.0\openapiutil-0.2.0.jar;D:\maven_lib\org\bouncycastle\bcpkix-jdk15on\1.65\bcpkix-jdk15on-1.65.jar;D:\maven_lib\org\bouncycastle\bcprov-jdk15on\1.65\bcprov-jdk15on-1.65.jar;D:\maven_lib\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;D:\maven_lib\redis\clients\jedis\3.3.0\jedis-3.3.0.jar;D:\maven_lib\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\maven_lib\org\apache\commons\commons-pool2\2.8.1\commons-pool2-2.8.1.jar;D:\maven_lib\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;D:\maven_lib\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\maven_lib\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\maven_lib\org\aspectj\aspectjrt\1.9.6\aspectjrt-1.9.6.jar;D:\maven_lib\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar;D:\maven_lib\com\auth0\java-jwt\3.10.3\java-jwt-3.10.3.jar;D:\maven_lib\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;D:\maven_lib\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;D:\maven_lib\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;D:\maven_lib\commons-codec\commons-codec\1.14\commons-codec-1.14.jar;D:\maven_lib\com\alibaba\fastjson\1.2.47\fastjson-1.2.47.jar;D:\maven_lib\cn\hutool\hutool-all\5.7.7\hutool-all-5.7.7.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-data-redis\2.3.5.RELEASE\spring-boot-starter-data-redis-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\data\spring-data-redis\2.3.5.RELEASE\spring-data-redis-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\data\spring-data-keyvalue\2.3.5.RELEASE\spring-data-keyvalue-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\data\spring-data-commons\2.3.5.RELEASE\spring-data-commons-2.3.5.RELEASE.jar;D:\maven_lib\org\springframework\spring-oxm\5.2.10.RELEASE\spring-oxm-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-context-support\5.2.10.RELEASE\spring-context-support-5.2.10.RELEASE.jar;D:\maven_lib\io\lettuce\lettuce-core\5.3.5.RELEASE\lettuce-core-5.3.5.RELEASE.jar;D:\maven_lib\io\netty\netty-common\4.1.53.Final\netty-common-4.1.53.Final.jar;D:\maven_lib\io\netty\netty-handler\4.1.53.Final\netty-handler-4.1.53.Final.jar;D:\maven_lib\io\netty\netty-resolver\4.1.53.Final\netty-resolver-4.1.53.Final.jar;D:\maven_lib\io\netty\netty-buffer\4.1.53.Final\netty-buffer-4.1.53.Final.jar;D:\maven_lib\io\netty\netty-codec\4.1.53.Final\netty-codec-4.1.53.Final.jar;D:\maven_lib\io\netty\netty-transport\4.1.53.Final\netty-transport-4.1.53.Final.jar;D:\maven_lib\io\projectreactor\reactor-core\3.3.11.RELEASE\reactor-core-3.3.11.RELEASE.jar;D:\maven_lib\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-client\4.7.1\rocketmq-client-4.7.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-common\4.7.1\rocketmq-common-4.7.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-remoting\4.7.1\rocketmq-remoting-4.7.1.jar;D:\maven_lib\io\netty\netty-all\4.1.53.Final\netty-all-4.1.53.Final.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-logging\4.7.1\rocketmq-logging-4.7.1.jar;D:\maven_lib\io\netty\netty-tcnative-boringssl-static\2.0.34.Final\netty-tcnative-boringssl-static-2.0.34.Final.jar;D:\maven_lib\commons-validator\commons-validator\1.6\commons-validator-1.6.jar;D:\maven_lib\commons-digester\commons-digester\1.8.1\commons-digester-1.8.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-spring-boot-starter\2.1.1\rocketmq-spring-boot-starter-2.1.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-spring-boot\2.1.1\rocketmq-spring-boot-2.1.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-acl\4.7.1\rocketmq-acl-4.7.1.jar;D:\maven_lib\org\apache\rocketmq\rocketmq-srvutil\4.7.1\rocketmq-srvutil-4.7.1.jar;D:\maven_lib\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;D:\maven_lib\org\springframework\boot\spring-boot-starter-validation\2.3.5.RELEASE\spring-boot-starter-validation-2.3.5.RELEASE.jar;D:\maven_lib\com\github\tencentyun\tls-sig-api-v2\2.0\tls-sig-api-v2-2.0.jar;D:\maven_lib\org\json\json\20180130\json-20180130.jar;D:\maven_lib\com\alibaba\easyexcel\3.0.5\easyexcel-3.0.5.jar;D:\maven_lib\org\apache\poi\poi\4.1.2\poi-4.1.2.jar;D:\maven_lib\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\maven_lib\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;D:\maven_lib\com\zaxxer\SparseBitSet\1.2\SparseBitSet-1.2.jar;D:\maven_lib\org\apache\poi\poi-ooxml\4.1.2\poi-ooxml-4.1.2.jar;D:\maven_lib\org\apache\commons\commons-compress\1.19\commons-compress-1.19.jar;D:\maven_lib\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;D:\maven_lib\org\apache\poi\poi-ooxml-schemas\4.1.2\poi-ooxml-schemas-4.1.2.jar;D:\maven_lib\org\apache\xmlbeans\xmlbeans\3.1.0\xmlbeans-3.1.0.jar;D:\maven_lib\org\apache\commons\commons-csv\1.8\commons-csv-1.8.jar;D:\maven_lib\cglib\cglib\3.3.0\cglib-3.3.0.jar;D:\maven_lib\org\ow2\asm\asm\7.1\asm-7.1.jar;D:\maven_lib\org\ehcache\ehcache\3.8.1\ehcache-3.8.1.jar;D:\maven_lib\org\glassfish\jaxb\jaxb-runtime\2.3.3\jaxb-runtime-2.3.3.jar;D:\maven_lib\org\glassfish\jaxb\txw2\2.3.3\txw2-2.3.3.jar;D:\maven_lib\com\sun\istack\istack-commons-runtime\3.0.11\istack-commons-runtime-3.0.11.jar;D:\maven_lib\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;D:\maven_lib\org\apache\shiro\shiro-core\1.5.3\shiro-core-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-lang\1.5.3\shiro-lang-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-cache\1.5.3\shiro-cache-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-crypto-hash\1.5.3\shiro-crypto-hash-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-crypto-core\1.5.3\shiro-crypto-core-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-crypto-cipher\1.5.3\shiro-crypto-cipher-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-config-core\1.5.3\shiro-config-core-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-config-ogdl\1.5.3\shiro-config-ogdl-1.5.3.jar;D:\maven_lib\org\apache\shiro\shiro-event\1.5.3\shiro-event-1.5.3.jar;D:\maven_lib\org\apache\kafka\kafka-clients\2.5.1\kafka-clients-2.5.1.jar;D:\maven_lib\com\github\luben\zstd-jni\1.4.4-7\zstd-jni-1.4.4-7.jar;D:\maven_lib\org\lz4\lz4-java\1.7.1\lz4-java-1.7.1.jar;D:\maven_lib\org\xerial\snappy\snappy-java\1.1.7.3\snappy-java-1.1.7.3.jar;D:\maven_lib\org\springframework\kafka\spring-kafka\2.5.7.RELEASE\spring-kafka-2.5.7.RELEASE.jar;D:\maven_lib\org\springframework\spring-context\5.2.10.RELEASE\spring-context-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-messaging\5.2.10.RELEASE\spring-messaging-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\spring-tx\5.2.10.RELEASE\spring-tx-5.2.10.RELEASE.jar;D:\maven_lib\org\springframework\retry\spring-retry\1.2.5.RELEASE\spring-retry-1.2.5.RELEASE.jar;D:\IntelliJ IDEA 2020.1\lib\idea_rt.jar
java.vm.specification.version=1.8
sun.arch.data.model=64
java.home=D:\java\jdk1.8.0_371\jre
sun.java.command=com.example.validated.commandline.SystemCommandLine
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_371
java.ext.dirs=D:\java\jdk1.8.0_371\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path=D:\java\jdk1.8.0_371\jre\lib\resources.jar;D:\java\jdk1.8.0_371\jre\lib\rt.jar;D:\java\jdk1.8.0_371\jre\lib\jsse.jar;D:\java\jdk1.8.0_371\jre\lib\jce.jar;D:\java\jdk1.8.0_371\jre\lib\charsets.jar;D:\java\jdk1.8.0_371\jre\lib\jfr.jar;D:\java\jdk1.8.0_371\jre\classes
java.vendor=Oracle Corporation
java.specification.maintenance.version=4
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64

获取resources下的文件,因为我是一个目录,目录下可能有多个文件,就有了如下代码:

String targetDir = System.getProperty("user.dir") + FileUtil.FILE_SEPARATOR + "compress";
String resourcePath = "tools/compress";
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:" + resourcePath + "/**");
if (resources.length > 0) {
	for (Resource resource : resources) {
		String filename = resource.getFilename();
		// 为什么要加这个判断呢 因为是/**匹配 遍历到文件夹就会有问题
		if (StrUtil.isBlank(filename)) {
			continue;
		}
		log.info("filename:{}", filename);
		InputStream inputStream = resource.getInputStream();
		// FileUtil是Hutool下的文件工具类cn.hutool.core.io.FileUtil
		String newFilePath = targetDir + FileUtil.FILE_SEPARATOR + filename;
		log.info("newFilePath:{}", newFilePath);
		// 这个方法会自动关闭输入流
		FileUtil.writeFromStream(inputStream, newFilePath);
	}
}

关于bat文件的编码问题

正常情况下,在bat文件中编写指令,如果都写的是命令符,不加注释(包括中英文),在运行上都不会有什么问题
但当你添加了注释,就会有意想不到的结果了
我是中午调用bat文件 发现报错,就开始了瞎捉摸的状态了

@echo off

:loop
if "%1a"=="a" goto :end
if "%2a"=="a" goto :end
set compressed_file_name=%1
set source_path=%2

:: 使用7-Zip进行压缩
"%~dp07z" a "%compressed_file_name%.zip" "%source_path%"
shift
shift
goto :loop

:end

以上是最开始的写法,文件的编码方式如下
编码方式
执行bat,就会有了意想不到
意想不到
将同样的命令,转化为Windows格式
windows编码
再次运行,执行结果Everything is OK
OK
执行到这里,就会想是文件的编码方式,让windows系统不认识????就产生了这样的问号,开始去怀疑jar的打包方式了???
当看到那行注释,去掉,转换为最初的Unix编码,再次执行,就得到了正常的结果
Unix
执行结果也是Everything is OK
OKK

关于[Hutool](https://www.hutool.cn/docs/#/)工具中的FileUtil使用
使用FileUtil.FILE_SEPARATOR来区分windows(\)系统和Linux(/)系统下的文件夹的斜杠格式
同理,FileUtil中判断是Windows系统还是Linux系统,也是用文件夹的斜杠格式

	/**
	 * 是否为Windows环境
	 *
	 * @return 是否为Windows环境
	 * @since 3.0.9
	 */
	public static boolean isWindows() {
		return FileNameUtil.WINDOWS_SEPARATOR == File.separatorChar;
	}

压缩工具有了,下面就开始了压缩文件
首先,有一个/log文件夹,文件夹下有abc这么一个文件,这个文件是被系统占用的,当对这个文件进行压缩时,是不能操作的
于是就有了copy文件的想法
由于要适配Windows系统和Linux系统
于是

xcopy D:\workspace\log\abc D:\workspace\log\copyTemp\

最初的想法是在abc文件的文件夹下复制出文件copy_abc文件,再进行压缩,xcopy会提示复制的是文件还是文件夹,会有那么一个对话,对于程序来说,可来不了对话
xcopy
然后就搜索了xcopy的相关参数,https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/xcopy发现并没有能用的参数
于是就想,既然不让复制成文件,那就将abc文件复制到文件夹中
在这里插入图片描述
复制到全路径文件夹下,xcopy是知道文件夹的,并且如果copyTemp文件夹不存在,在Windows下也能自动创建
那么在Linux环境下,copy文件就想到了cp命令

cp /root/log/abc /root/log/compyTemp/

本来想法挺好,后来发现cp对于这个不存在的文件夹copyTemp,是不能创建的

mkdir copyTemp & cp /root/log/abc /root/log/compyTemp/

要么mkdir创建要么通过FileUtil去创建,这个选择了FileUtil

FileUtil.mkdir(targetDir);

有了复制命令,那就得调用系统执行命令了
普通方法

String command = "xcopy abc D:\\workspace\\log\\copyTemp\\";
Process process = Runtime.getRuntime().exec(command);

int exitCode = process.waitFor();

Hutool工具中也给提供了

String command = "xcopy abc D:\\workspace\\log\\copyTemp\\";
String result = RuntimeUtil.execForStr(copyCommand);

	/**
	 * 执行系统命令,使用系统默认编码
	 *
	 * @param cmds 命令列表,每个元素代表一条命令
	 * @return 执行结果
	 * @throws IORuntimeException IO异常
	 */
	public static String execForStr(String... cmds) throws IORuntimeException {
		return execForStr(CharsetUtil.systemCharset(), cmds);
	}

这个方法是阻塞方法,执行完返回result就相当于copy的文件就能拿到了

后面再就是拼压缩命令调用压缩工具了

compress_windows.bat D:\workspace\log\\copyTemp\abc D:\workspace\log\\copyTemp\abc

sh compress_linux.sh /root/log/copyTemp/abc /root/log/copyTemp/abc 
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package com.hexiang.utils; import java.io.*; /** * FileUtil. Simple file operation class. * * @author BeanSoft * */ public class FileUtil { /** * The buffer. */ protected static byte buf[] = new byte[1024]; /** * Read content from local file. FIXME How to judge UTF-8 and GBK, the * correct code should be: FileReader fr = new FileReader(new * InputStreamReader(fileName, "ENCODING")); Might let the user select the * encoding would be a better idea. While reading UTF-8 files, the content * is bad when saved out. * * @param fileName - * local file name to read * @return * @throws Exception */ public static String readFileAsString(String fileName) throws Exception { String content = new String(readFileBinary(fileName)); return content; } /** * 读取文件并返回为给定字符集的字符串. * @param fileName * @param encoding * @return * @throws Exception */ public static String readFileAsString(String fileName, String encoding) throws Exception { String content = new String(readFileBinary(fileName), encoding); return content; } /** * 读取文件并返回为给定字符集的字符串. * @param fileName * @param encoding * @return * @throws Exception */ public static String readFileAsString(InputStream in) throws Exception { String content = new String(readFileBinary(in)); return content; } /** * Read content from local file to binary byte array. * * @param fileName - * local file name to read * @return * @throws Exception */ public static byte[] readFileBinary(String fileName) throws Exception { FileInputStream fin = new FileInputStream(fileName); return readFileBinary(fin); } /** * 从输入流读取数据为二进制字节数组. * @param streamIn * @return * @throws IOException */ public static byte[] readFileBinary(InputStream streamIn) throws IOException { BufferedInputStream in = new BufferedInputStream(streamIn); ByteArrayOutputStream out = new ByteArrayOutputStream(10240); int len; while ((len

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值