掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Java是一種流行的編程語言,被廣泛應(yīng)用于Web開發(fā)、移動開發(fā)、嵌入式系統(tǒng)開發(fā)等領(lǐng)域。而Linux是一種流行的操作系統(tǒng),它的命令行界面為用戶提供了強大的控制和操作能力。本文將探討如何在Java代碼中調(diào)用Linux的tar命令,實現(xiàn)文件的壓縮和解壓縮功能。

成都創(chuàng)新互聯(lián)專注于東風(fēng)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。東風(fēng)網(wǎng)站建設(shè)公司,為東風(fēng)等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
我們需要了解一下Linux的tar命令。tar命令是一個用于歸檔和壓縮文件的命令行工具,它的用法如下:
“`
tar [options] [file/dir]
“`
其中,options是一些可選的選項,用于控制tar命令的行為,file/dir是要被處理的文件或目錄。
下面是一些常用的選項:
– c:創(chuàng)建歸檔文件
– x:解壓歸檔文件
– v:顯示詳細的處理過程
– z:使用gzip壓縮/解壓縮
– f:指定歸檔文件名
例如,要將目錄/home/user/mydir壓縮成一個歸檔文件mydir.tar.gz,可以使用以下命令:
“`
tar czvf mydir.tar.gz /home/user/mydir
“`
要將歸檔文件mydir.tar.gz解壓縮到當(dāng)前目錄下,可以使用以下命令:
“`
tar xzvf mydir.tar.gz
“`
接下來,我們將使用Java代碼調(diào)用Linux的tar命令,實現(xiàn)文件的壓縮和解壓縮功能。我們需要使用Java的Runtime類創(chuàng)建一個進程來執(zhí)行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將進程的輸出和輸入流連接起來,實現(xiàn)Java程序與進程之間的通信。代碼如下:
“`java
InputStream inputStream = process.getInputStream();
OutputStream outputStream = process.getOutputStream();
“`
在壓縮和解壓縮過程中,我們需要讀取和寫入文件數(shù)據(jù)。Java語言提供了FileInputStream和FileOutputStream兩個類,可以用于訪問文件的輸入和輸出流。代碼如下:
“`java
FileInputStream fileInputStream = new FileInputStream(“mydir.tar.gz”);
FileOutputStream fileOutputStream = new FileOutputStream(“mydir_new”);
“`
將以上三個流連接起來,就可以實現(xiàn)文件的壓縮和解壓縮功能。代碼如下:
“`java
int count = 0;
byte[] buffer = new byte[1024];
while ((count = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, count);
}
“`
在這里,我們將輸入流的數(shù)據(jù)讀取到緩沖區(qū)中,然后將緩沖區(qū)的數(shù)據(jù)寫入輸出流中。
我們需要等待進程執(zhí)行完畢,然后檢查執(zhí)行結(jié)果。代碼如下:
“`java
int exitCode = process.wtFor();
if (exitCode == 0) {
System.out.println(“執(zhí)行成功”);
} else {
System.out.println(“執(zhí)行失敗,退出碼為:” + exitCode);
}
“`
在這里,我們使用Process的wtFor方法等待進程執(zhí)行完畢,并返回進程的退出碼。如果退出碼為0,說明執(zhí)行成功;否則說明執(zhí)行失敗。
以上代碼片段演示了如何使用Java調(diào)用Linux的tar命令實現(xiàn)文件的壓縮和解壓縮功能。讀者可以根據(jù)自己的需要進行修改和擴展。需要注意的是,由于Linux的tar命令是基于命令行界面的,因此在使用時需要了解Linux的命令行界面和基本操作,否則可能會出現(xiàn)一些問題。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-869222201.首先要去下載好JDK,Java SE 8的官方網(wǎng)址是
根據(jù)自己的系統(tǒng)版本來選擇是要使用32位版還是64位版。Linux提供了兩種安裝方式一個是.rpm,另一個是.tar.gz,我所使用的是.tar.gz。在下載前不要忘了選擇Accept License Agreement。
2.可以使用下面的命令來查看自己的系統(tǒng)是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.然后我們來設(shè)置環(huán)境變量,這里我們需要修改/etc/profile文件
先用vim打開/etc/profile文件
vim /etc/profile
6.在文件最后添加下面的內(nèi)容
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請根據(jù)自己的實際文件名作出更改
添加完成后,保存并退出。最后一步便是重啟計算機。
reboot
計算機重啟后我們可以在終端中輸入java來檢測是否配置成功
java
如果配置成功便會顯示提示信息
用法: java class
(執(zhí)行類)
或 java -jar jarfile
(執(zhí)行 jar 文件)
其中選項包括:
-d32 使用 32 位數(shù)據(jù)模型 (如果可用)
-d64 使用 64 位數(shù)據(jù)模型 (如果可用)
-server 選擇 “server” VM
默認 VM 是 server,
因為您是在服務(wù)器類計算機上運行。判如
-cp
-classpath
用 : 分隔的目錄, JAR 檔案
和 ZIP 檔案列表, 用于搜索類文件。
-D=
設(shè)置系統(tǒng)屬性
-verbose:
啟用詳細輸出
-version 輸出產(chǎn)品版本并退出
-version:
警告: 此功能已過時, 將在
未來發(fā)行版中刪除。
需要指定的版本才能運行
-showversion 輸出產(chǎn)品版本并繼續(xù)
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已過時, 將在
未來發(fā)行版中刪除。
在版本搜索中包括/排除用戶專用 JRE
-? -help 輸出此幫助消息
-X輸出非標準選項的幫助
-ea
-enableassertions
按指定的粒度啟用斷言
-da
-disableassertions
禁用具有猛拆指定粒度的斷言
-esa | -enablesystemassertions
啟用系統(tǒng)斷言
-dsa | -disablesystemassertions
禁用系統(tǒng)斷言
-agentlib:
加載本機代理庫 , 例如 -agentlib:hprof
另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:
按完整路徑名加載本機代理庫
-javaagent:
加載 Java 編程語言代理, 請參閱 java.lang.instrument
-splash:
使用指定的圖像顯示啟動屏幕
三種配置環(huán)境變量的方法
1. 修改/etc/profile文件
如果你的計算機僅僅作為開發(fā)使用時推薦使用這種方法,因為所有用戶的shell都有權(quán)使用這些環(huán)境變量,可能會給系統(tǒng)帶來安全性問題。
·用文本則友編輯器打開/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
·重新登錄或執(zhí)行 sudo source /etc/profile
·注解
a. 假設(shè)你要將 /usr/share/jdk1.6.0_14改為你的jdk安裝目錄
b. linux下用冒號“:”來分隔爛彎路徑
c. $PATH / $CLASSPATH / $JAVA_HOME 是用來引用原來的環(huán)境變量的值
在設(shè)置環(huán)境變量時特別要注意不能把原來的值給覆蓋掉了,這是一種
常見的錯誤。
d. CLASSPATH中當(dāng)前目錄“.”不能丟,把當(dāng)前目錄丟掉也是常見的錯誤。
e. export是把這三個變量導(dǎo)出為全局變量。
f. 大小寫必須嚴格區(qū)分。
2. 修改.bash_profile文件
這種方法更為安全,它可以把使用這些環(huán)境變量的權(quán)限控制到用戶級別,如果你需要給某個用戶權(quán)限使用這些環(huán)境變量,你只需要修改其個人用戶主目錄下的.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
·重新登錄或執(zhí)行source ~/.bash_profile
3. 直接在shell下設(shè)置變量
不贊成使用這種方法,因為換個shell,你的設(shè)置就無效了,因此這種方法僅僅是臨時使用,以后要使用的時候又要重新設(shè)置,比較麻煩。
只需在shell終端執(zhí)行下列命令:
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中設(shè)置java
1. 下載銷頃jdk-6u43-linux-x64.bin,
增加可執(zhí)行權(quán)伍斗旦限 chmod +x jdk-6u43-linux-x64.bin,
執(zhí)行 ./jdk-6u43-linux-x64.bin 生成目錄jdk1.6.0_43
拷貝到/usr/share下,mv jdk1.6.0_43 /usr/share
另外,jdk-6u43-linux-x64.bin將所有文件解壓縮到當(dāng)前目錄的腔擾jdk$verison_$update目錄,
jdk-6u43-linux-x64-rpm.bin解壓縮生成rpm包,用rpm -ivh命令安裝
2. 配置環(huán)境變量
在/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服務(wù)器不會重啟,或者一次性使用java,可以直接在shell內(nèi)依次輸辯啟入一下幾條命令:
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后主要需要設(shè)運悶置兩個地方
JAVA_HOME, apt/yum安裝的jdk通常在/usr/lib/jvm下, 如/usr/lib/jvm/java-8-openjdk-amd64, mvn之類的工具依賴JAVA_HOME環(huán)境變量
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
下載地址:
(目前最新為RAR 3.71 for Linux)
以最新的為準。
對于Window下的常見壓縮文件.zip和.rar,Linux也嫌罩有相應(yīng)的方法來解壓它們:
1:對于.zip
linux下提供了zip和unzip程序,zip是壓縮程芹大鬧序,unzip是解壓程序。它們的參數(shù)選項很多,這里只做簡單介紹,舉例說明一下其用法:
# zip all.zip *.jpg(這條命令是將所有.jpg的文件壓縮成一個zip包)
# unzip all.zip(這條命令是將all.zip中的所有文件解壓出來)
2:對于.rar
要在linux下處理.rar文件,需要安裝RAR for Linux,可以從網(wǎng)上下載,但要記住,RAR for Linux不是免費的;可從
下載RAR 3。60 for Linux ,然后安裝其安裝操作如下:
# tar -xzpvf rarlinux-3.2.0.tar.gz
# cd rar
# make
這樣就安裝好了,安裝后就有了rar和unrar這兩個程序,rar是壓縮程序,unrar是解壓程序。它們的參數(shù)選項很多,舉例說明一下其用法
# rar a all *.jpg
這條命令是將所有.jpg的文件壓縮成一個rar包,名為all.rar,該程序會將.rar 擴展名將自動附加到包名仿運后。
# unrar e all.rar
這條命令是將all.rar中的所有文件解壓出來。
linux下的文件名引用的時候空格要加轉(zhuǎn)義 比如
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格式壓縮包
* 對應(yīng)的是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));
/態(tài)山*
ant下的zip工具默認壓縮編碼為UTF-8編碼,
而winRAR軟件壓縮是用的windows默認的GBK或者GB2312編碼
所以解壓縮時要制定編碼格式
*/
e.setEncoding(“gbk”);
e.execute();
}catch(Exception e){
throw e;
}
}
/**
* 解壓rar格式壓縮包。
* 對應(yīng)的是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 根據(jù)不同的操作系耐局統(tǒng)拿到相應(yīng)的 destDirName 和 destFileName
String compressFileName = fh.getFileNameString().trim();
String destFileName = “”;
String destDirName = “”;
//非windows系統(tǒng)
if(File.separator.equals(“/”)){
destFileName = destDir + compressFileName.replaceAll(“\\\\”, “/”);
destDirName = destFileName.substring(0, destFileName.lastIndexOf(“/”));
//windows系統(tǒng)
}else{
destFileName = destDir + compressFileName.replaceAll(“/”, “\\\\”);
destDirName = destFileName.substring(0, destFileName.lastIndexOf(“\\”));
}
//2創(chuàng)建文件夾
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;
}
//根據(jù)類型,進行相應(yīng)的解壓縮
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當(dāng)前環(huán)境設(shè)置為中文環(huán)境即可。山埋
修改/態(tài)唯晌etc/sysconfig/i18n 文件
LANG=”zh_CN.GB2312″
關(guān)于java 調(diào)用 linux tar的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設(shè)計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流