Java如何调用Linux的tar命令 (java 调用 linux tar)

Java是一种流行的编程语言,被广泛应用于Web开发、移动开发、嵌入式系统开发等领域。而Linux是一种流行的操作系统,它的命令行界面为用户提供了强大的控制和操作能力。本文将探讨如何在Java代码中调用Linux的tar命令,实现文件的压缩和解压缩功能。

我们需要了解一下Linux的tar命令。tar命令是一个用于归档和压缩文件的命令行工具,它的用法如下:

“`

tar [options] [file/dir]

“`

其中,options是一些可选的选项,用于控制tar命令的行为,file/dir是要被处理的文件或目录。

下面是一些常用的选项:

– c:创建归档文件

– x:解压归档文件

– v:显示详细的处理过程

– z:使用gzip压缩/解压缩

– f:指定归档文件名

例如,要将目录/home/user/mydir压缩成一个归档文件mydir.tar.gz,可以使用以下命令:

“`

tar czvf mydir.tar.gz /home/user/mydir

“`

要将归档文件mydir.tar.gz解压缩到当前目录下,可以使用以下命令:

“`

tar xzvf mydir.tar.gz

“`

接下来,我们将使用Java代码调用Linux的tar命令,实现文件的压缩和解压缩功能。我们需要使用Java的Runtime类创建一个进程来执行Linux的tar命令。代码如下:

“`java

Runtime runtime = Runtime.getRuntime();

Process process = runtime.exec(“tar czvf mydir.tar.gz /home/user/mydir”);

“`

这里我们使用了tar命令的-czvf选项,将目录/home/user/mydir压缩成mydir.tar.gz文件。

接下来,我们可以使用Java的InputStream和OutputStream将进程的输出和输入流连接起来,实现Java程序与进程之间的通信。代码如下:

“`java

InputStream inputStream = process.getInputStream();

OutputStream outputStream = process.getOutputStream();

“`

在压缩和解压缩过程中,我们需要读取和写入文件数据。Java语言提供了FileInputStream和FileOutputStream两个类,可以用于访问文件的输入和输出流。代码如下:

“`java

FileInputStream fileInputStream = new FileInputStream(“mydir.tar.gz”);

FileOutputStream fileOutputStream = new FileOutputStream(“mydir_new”);

“`

将以上三个流连接起来,就可以实现文件的压缩和解压缩功能。代码如下:

“`java

int count = 0;

byte[] buffer = new byte[1024];

while ((count = inputStream.read(buffer)) != -1) {

outputStream.write(buffer, 0, count);

}

“`

在这里,我们将输入流的数据读取到缓冲区中,然后将缓冲区的数据写入输出流中。

我们需要等待进程执行完毕,然后检查执行结果。代码如下:

“`java

int exitCode = process.wtFor();

if (exitCode == 0) {

System.out.println(“执行成功”);

} else {

System.out.println(“执行失败,退出码为:” + exitCode);

}

“`

在这里,我们使用Process的wtFor方法等待进程执行完毕,并返回进程的退出码。如果退出码为0,说明执行成功;否则说明执行失败。

以上代码片段演示了如何使用Java调用Linux的tar命令实现文件的压缩和解压缩功能。读者可以根据自己的需要进行修改和扩展。需要注意的是,由于Linux的tar命令是基于命令行界面的,因此在使用时需要了解Linux的命令行界面和基本操作,否则可能会出现一些问题。

相关问题拓展阅读:

linux 中怎么设置java

1.首先要去下载好JDK,Java SE 8的官方网址是

根据自己的系统版本来选择是要使用32位版还是64位版。Linux提供了两种安装方式一个是.rpm,另一个是.tar.gz,我所使用的是.tar.gz。在下载前不要忘了选择Accept License Agreement。

2.可以使用下面的命令来查看自己的系统是32位还是64位

getconf LONG_BIT

3.接下来我们对下载的文件进行解压

tar -zxvf jdk-8u102-linux-x64.tar.gz

4.然后我们来新建一个目录,并将解压好的文件移动过去

mkdir /usr/java

mv ./jdk1.8.0_102 /usr/java

5.然后我们来设置环境变量,这里我们需要修改/etc/profile文件

先用vim打开/etc/profile文件

vim /etc/profile

6.在文件最后添加下面的内容

JAVA_HOME=/usr/java/jdk1.8.0_102

export JRE_HOME=/usr/java/jdk1.8.0_102/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

其中的jdk1.8.0_102请根据自己的实际文件名作出更改

添加完成后,保存并退出。最后一步便是重启计算机。

reboot

计算机重启后我们可以在终端中输入java来检测是否配置成功

java

如果配置成功便会显示提示信息

用法: java class

(执行类)

或 java -jar jarfile

(执行 jar 文件)

其中选项包括:

-d32 使用 32 位数据模型 (如果可用)

-d64 使用 64 位数据模型 (如果可用)

-server 选择 “server” VM

默认 VM 是 server,

因为您是在服务器类计算机上运行。判如

-cp

-classpath

用 : 分隔的目录, JAR 档案

和 ZIP 档案列表, 用于搜索类文件。

-D=

设置系统属性

-verbose:

启用详细输出

-version 输出产品版本并退出

-version:

警告: 此功能已过时, 将在

未来发行版中删除。

需要指定的版本才能运行

-showversion 输出产品版本并继续

-jre-restrict-search | -no-jre-restrict-search

警告: 此功能已过时, 将在

未来发行版中删除。

在版本搜索中包括/排除用户专用 JRE

-? -help 输出此帮助消息

-X输出非标准选项的帮助

-ea

-enableassertions

按指定的粒度启用断言

-da

-disableassertions

禁用具有猛拆指定粒度的断言

-esa | -enablesystemassertions

启用系统断言

-dsa | -disablesystemassertions

禁用系统断言

-agentlib:

加载本机代理库 , 例如 -agentlib:hprof

另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help

-agentpath:

按完整路径名加载本机代理库

-javaagent:

加载 Java 编程语言代理, 请参阅 java.lang.instrument

-splash:

使用指定的图像显示启动屏幕

三种配置环境变量的方法

1. 修改/etc/profile文件 

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 

·用文本则友编辑器打开/etc/profile 

·在profile文件末尾加入: 

export JAVA_HOME=/usr/share/jdk1.6.0_14

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

·重新登录或执行 sudo source /etc/profile

·注解 

a. 假设你要将 /usr/share/jdk1.6.0_14改为你的jdk安装目录 

b. linux下用冒号“:”来分隔烂弯路径 

c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值 

在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种 

常见的错误。 

d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。 

e. export是把这三个变量导出为全局变量。 

f. 大小写必须严格区分。 

2. 修改.bash_profile文件 

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bash_profile文件就可以了。 

·用文本编辑器打开用户目录下的.bash_profile文件 

·在.bash_profile文件末尾加入: 

export JAVA_HOME=/usr/share/jdk1.6.0_14 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

·重新登录或执行source ~/.bash_profile

3. 直接在shell下设置变量 

不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。 

只需在shell终端执行下列命令: 

export JAVA_HOME=/usr/share/jdk1.6.0_14 

export PATH=$JAVA_HOME/bin:$PATH 

export 饥盯闷CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

Linux下Java安装与配置

以JDK1.6.0_43为例介绍一下如何在linux中设置java

1. 下载销顷jdk-6u43-linux-x64.bin,

增加可执行权伍斗旦限 chmod +x jdk-6u43-linux-x64.bin,

执行 ./jdk-6u43-linux-x64.bin 生成目录jdk1.6.0_43

拷贝到/usr/share下,mv jdk1.6.0_43 /usr/share

另外,jdk-6u43-linux-x64.bin将所有文件解压缩到当前目录的腔扰jdk$verison_$update目录,

jdk-6u43-linux-x64-rpm.bin解压缩生成rpm包,用rpm -ivh命令安装

 

2. 配置环境变量

在/etc/profile下增加

# set Java environment

JAVA_HOME=/usr/share/jdk1.6.0_43

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

 

3. 测试

# echo $JAVA_HOME

/usr/share/jdk1.6.0_43

# echo $PATH

/usr/share/jdk1.6.0_43/bin:/usr/lib64/qt-3.3/bin:/usr/local/in:/usr/local/bin:/in:/bin:/usr/in:/usr/bin:/root/bin

# echo $CLASSPATH

.:/usr/share/jdk1.6.0_43/lib/dt.jar:/usr/share/jdk1.6.0_43/lib/tools.jar

# java -version

java version “1.6.0_43”

Java(TM) SE Runtime Environment (build 1.6.0_43-b01)

Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)

1、如果你的linux服务器不会重启,或者一次性使用java,可以直接在shell内依次输辩启入一下几条命令:

 export JAVA_HOME=/usr/share/jdk1.8.0_71 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

2、如果考虑到长久使用,且机器有可能会被重启掉,那么使用以下方法:

 打开/etc/profile(用vi或简灶含者其他你自己拦笑喜欢的文本编辑器)

在文件末尾添加如下语句:

JAVA_HOME=/usr/java/default

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

linux上安装java后主要需要设运闷置两个地方

JAVA_HOME, apt/yum安装的jdk通常在/usr/lib/jvm下, 如/usr/lib/jvm/java-8-openjdk-amd64, mvn之类的工具依赖JAVA_HOME环境变量

PATH, 需要确保$JAVA_HOME/bin在PATH中

配置文件修改, 通常可以修改~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export PATH=$JAVA_HOME/bin:$PATH

要对所有用户生效可以编旁埋弯辑/etc/profile.d/java.sh, 添加

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export PATH=$JAVA_HOME/bin:$PATH

在LINUX下 用JAVA如何解压rar文件

下载地址:

(目前最新为RAR 3.71 for Linux)

以最新的为准。

对于Window下的常见压缩文件.zip和.rar,Linux也嫌罩有相应的方法来解压它们:

1:对于.zip

linux下提供了zip和unzip程序,zip是压缩程芹大闹序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,举例说明一下其用法:

# zip all.zip *.jpg(这条命令是将所有.jpg的文件压缩成一个zip包)

# unzip all.zip(这条命令是将all.zip中的所有文件解压出来)

2:对于.rar

要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux不是免费的;可从

下载RAR 3。60 for Linux ,然后安装其安装操作如下:

# tar -xzpvf rarlinux-3.2.0.tar.gz

# cd rar

# make

这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,举例说明一下其用法

# rar a all *.jpg

这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名仿运后。

# unrar e all.rar

这条命令是将all.rar中的所有文件解压出来。

linux下的文件名引用的时候空格要加转义 比如

test file.rar 实际引用的时候就是 test\ file.rar

至于怎么解决 我就不再多说了哈

楼主试试这个代码~~

package decompress;

import java.io.File;

import java.io.FileOutputStream;

import org.apache.tools.ant.Project;

import org.apache.tools.ant.taskdefs.Expand;

import de.innosystec.unrar.Archive;

import de.innosystec.unrar.rarfile.FileHeader;

public class DeCompressUtil {

/昌闭让**

* 解压zip格式压缩包

* 对应的是ant.jar

*/

private static void unzip(String sourceZip,String destDir) throws Exception{

try{

Project p = new Project();

Expand e = new Expand();

e.setProject(p);

e.setSrc(new File(sourceZip));

e.setOverwrite(false);

e.setDest(new File(destDir));

/态山*

ant下的zip工具默认压缩编码为UTF-8编码,

而winRAR软件压缩是用的windows默认的GBK或者GB2312编码

所以解压缩时要制定编码格式

*/

e.setEncoding(“gbk”);

e.execute();

}catch(Exception e){

throw e;

}

}

/**

* 解压rar格式压缩包。

* 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar

*/

private static void unrar(String sourceRar,String destDir) throws Exception{

Archive a = null;

FileOutputStream fos = null;

try{

a = new Archive(new File(sourceRar));

FileHeader fh = a.nextFileHeader();

while(fh!=null){

if(!fh.isDirectory()){

//1 根据不同的操作系耐局统拿到相应的 destDirName 和 destFileName

String compressFileName = fh.getFileNameString().trim();

String destFileName = “”;

String destDirName = “”;

//非windows系统

if(File.separator.equals(“/”)){

destFileName = destDir + compressFileName.replaceAll(“\\\\”, “/”);

destDirName = destFileName.substring(0, destFileName.lastIndexOf(“/”));

//windows系统

}else{

destFileName = destDir + compressFileName.replaceAll(“/”, “\\\\”);

destDirName = destFileName.substring(0, destFileName.lastIndexOf(“\\”));

}

//2创建文件夹

File dir = new File(destDirName);

if(!dir.exists()||!dir.isDirectory()){

dir.mkdirs();

}

//3解压缩文件

fos = new FileOutputStream(new File(destFileName));

a.extractFile(fh, fos);

fos.close();

fos = null;

}

fh = a.nextFileHeader();

}

a.close();

a = null;

}catch(Exception e){

throw e;

}finally{

if(fos!=null){

try{fos.close();fos=null;}catch(Exception e){e.printStackTrace();}

}

if(a!=null){

try{a.close();a=null;}catch(Exception e){e.printStackTrace();}

}

}

}

/**

* 解压缩

*/

public static void deCompress(String sourceFile,String destDir) throws Exception{

//保证文件夹路径最后是”/”或者”\”

char lastChar = destDir.charAt(destDir.length()-1);

if(lastChar!=’/’&&lastChar!=’\\’){

destDir += File.separator;

}

//根据类型,进行相应的解压缩

String type = sourceFile.substring(sourceFile.lastIndexOf(“.”)+1);

if(type.equals(“zip”)){

DeCompressUtil.unzip(sourceFile, destDir);

}else if(type.equals(“rar”)){

DeCompressUtil.unrar(sourceFile, destDir);

}else{

throw new Exception(“只支持zip和rar格式的压缩包!”);

}

}

}

将帆锋linux当前环境设置为中文环境即可。山埋

修改/态唯晌etc/sysconfig/i18n 文件

LANG=”zh_CN.GB2312″

关于java 调用 linux tar的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Java如何调用Linux的tar命令 (java 调用 linux tar)