File類常用功能實現
阿新 • • 發佈:2018-12-19
1.遞迴 獲取資料夾的大小 在java IO流中 只能直接獲取資料夾的大小 對於資料夾的話 程式碼如下
import java.io.File;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws Exception {
File dir = getDir();
System.out.println(getDirlength(dir));
}
//獲取資料夾
public static File getDir()
{
Scanner sc = new Scanner(System.in);
while(true) {
String s = sc.nextLine();
File file = new File(s);
if(!file.exists()) {
System.out.println("您錄入錯誤");
}else if(file.isFile()) {
System.out.println("您錄入的是檔案");
}else {
return file;
}
}
}
//獲取檔案的大小
public static long getDirlength(File file)
{
long len = 0;
File[] subFiles = file.listFiles();
for (File subfile2 : subFiles) {
if(subfile2.isDirectory()) {
len+=getDirlength(subfile2);
}else if(subfile2.isFile()) {
len+=subfile2.length();
}
}
return len;
}
}
2.刪除資料夾 在java IO流中 資料夾只能刪除空的 只能使用遞迴去吧資料夾中的所有檔案刪除才能刪除資料夾 Windows刪除資料夾的操作實際上就是這樣
import java.io.File;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws Exception {
File f = getDir();
DeleteDir(f);
}
public static File getDir()
{
Scanner sc = new Scanner(System.in);
while(true) {
String s = sc.nextLine();
File file = new File(s);
if(!file.exists()) {
System.out.println("您錄入錯誤");
}else if(file.isFile()) {
System.out.println("您錄入的是檔案");
}else {
return file;
}
}
}
public static void DeleteDir(File dir)
{
File[] files = dir.listFiles();
for (File file : files) {
if(file.isFile()) {
file.delete();
}else if(file.isDirectory()) {
DeleteDir(file);
}
}
dir.delete();
}
}
3.利用遞迴 拷貝資料夾
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test3 {
/**
* 需求:3,從鍵盤接收兩個資料夾路徑,把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
*
* 把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
* 分析:
* 1,在目標資料夾中建立原資料夾
* 2,獲取原資料夾中所有的檔案和資料夾,儲存在File陣列中
* 3,遍歷陣列
* 4,如果是檔案就用io流讀寫
* 5,如果是資料夾就遞迴呼叫
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File src = Test1.getDir();
File dest = Test1.getDir();
if(src.equals(dest)) {
System.out.println("目標資料夾是原始檔夾的子資料夾");
}else {
copy(src,dest);
}
}
/*
* 把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
* 1,返回值型別void
* 2,引數列表File src,File dest
*/
public static void copy(File src, File dest) throws IOException {
//1,在目標資料夾中建立原資料夾
File newDir = new File(dest, src.getName());
newDir.mkdir();
//2,獲取原資料夾中所有的檔案和資料夾,儲存在File陣列中
File[] subFiles = src.listFiles();
//3,遍歷陣列
for (File subFile : subFiles) {
//4,如果是檔案就用io流讀寫
if(subFile.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
int b;
while((b = bis.read()) != -1) {
bos.write(b);
}
bis.close();
bos.close();
//5,如果是資料夾就遞迴呼叫
}else {
copy(subFile,newDir);
}
}
}
}
檔案壓縮流
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.io.FileOutputStream ;
public class Main{
public static void main(String args[]) throws Exception{ // 所有異常丟擲
File file = new File("e:" + File.separator + "abc.txt") ; // 定義要壓縮的檔案
File zipFile = new File("e:" + File.separator + "abc.zip") ; // 定義壓縮檔名稱
InputStream input = new FileInputStream(file) ; // 定義檔案的輸入流
ZipOutputStream zipOut = null ; // 宣告壓縮流物件
zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 設定ZipEntry物件
zipOut.setComment("www.mldnjava.cn") ; // 設定註釋
int temp = 0 ;
while((temp=input.read())!=-1){ // 讀取內容
zipOut.write(temp) ; // 壓縮輸出
}
input.close() ; // 關閉輸入流
zipOut.close() ; // 關閉輸出流
}
};
資料夾壓縮流
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.io.FileOutputStream ;
public class Main{
static InputStream input = null ; // 定義檔案輸入流
static ZipOutputStream zipOut = null ; // 宣告壓縮流物件
public static void main(String args[]) throws Exception{ // 所有異常丟擲
File file = new File("e:" + File.separator + "abc") ; // 定義要壓縮的資料夾
File zipFile = new File("e:" + File.separator + "abcc.zip") ; // 定義壓縮檔名稱
zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
zipOut.setComment("www.mldnjava.cn") ; // 設定註釋
f(file);
}
public static void f(File file) throws Exception
{
File[] subFiles = file.listFiles();
for (File file2 : subFiles) {
if(file2.isFile()) {
input = new FileInputStream(file2);
zipOut.putNextEntry(new ZipEntry(file.getName()+File.separator+file2.getName()));
int temp = 0;
while((temp = input.read()) != -1) {
zipOut.write(temp);
}
input.close();
}else {
f(file2);
}
}
zipOut.close();
}
}