1. 程式人生 > >File類常用功能實現

File類常用功能實現

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();
    }
}