Java 檔案與目錄

      在〈Java 檔案與目錄〉中尚無留言

路行分隔符號

在 Windows 系統下,路徑的分隔可用 “\\” 或 “/”,但在Linux系統下,路徑分隔只能用 “/”

File 物件

File 是收集檔案相關資訊的類別,如建立檔名、修改檔名、設定屬性等。

    public class FileTest {
        public static void main(String[] args) {
            File file1=new File("d:/testdir");
            file1.mkdirs();
            File file2=new File(file1, "test.txt");
            try {
                file2.createNewFile();
                System.out.println(file2+" 是否存在 : "+file2.exists());
            } catch (IOException ex) {
                Logger.getLogger(FileTest.class.getName()).log(Level.SEVERE, null, ex);
            }
            File file3=new File("d:/mp3");
            String[] files=file3.list();
            for (String f:files){
                if (new File(file3, f).isFile())
                    System.out.println(file1+"\\"+f);
            }
        }

mkdir

建立目錄,但父目錄不存在,則不會建立,也不會發生例外。

mkdirs

建立目錄,父目錄不存在,則一並建立。

createNameFile

建立檔案

exists

檢查檔案是否存在

isDirectory

檢查是否為目錄

isFile:

檢查是否為檔案

listFiles

傳回目錄下的檔案及目錄

FilenameFilter

FilenameFilter為一介面, 需實作accept()方法, 再將產生的物件置於list()方法內

    String[] files=file3.list(new FilenameFilter(){
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith("mp3");
        }
    });

Java Python 化

底下的代碼可以模擬 Python 的寫法,更方便處理檔案的操作。請新增 os.java 檔,後輸入如下代碼

package net.ddns.mahaljsp;
import java.io.File;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class os {
    public static void print(int i){
        System.out.println(String.valueOf(i));
    }
    public static void print(String... ls){
        for(var l : ls){
            System.out.print("%s ".formatted(l));
        }
        System.out.println();
    }    
    public static void print(List ls){
        for(var l : ls){
            System.out.println("%s".formatted(l));
        }
    }      
    public static void utf8(){
        if (System.console()==null){
            try{
                System.setOut(new PrintStream(System.out, true, "UTF-8"));
            }
            catch(UnsupportedEncodingException ex){}
        }
    } 
    public static boolean mkdir(String file){
        return new File(file).mkdirs();
    }    
    public static List<String> listdir(String file){
        List<String>rootList=new ArrayList<>();        
        File[] files=new File(file).listFiles();
        if(files!=null){//防止權限問題無法讀取裏面的目錄及檔案
            for (var f:files){
                rootList.add(f.toString());
            }
        }
        return rootList;
    }
    public static boolean rmdir(String file){
        return new File(file).delete();
    }
    public static boolean rmdirs(String file){
        if (os.path.isdir(file)){
            for (var dir:os.listdir(file)){
                rmdirs(dir);
            }
        }
        return new File(file).delete();
    }    
    public static List<String> walk(String file){
        List<String> rootList=new ArrayList<>();
        if (os.path.isdir(file)){
            for (var dir:os.listdir(file)){
                rootList.addAll(walk(dir));
            }
        }
        if(os.path.exists(file)){
            rootList.add(file.replace("/","\\"));        
        }
        return rootList;
    }
    public class path{
        public static String join(String... files){
            /*
            File root=new File(files[0]);
            for (int i=1;i<files.length;i++){
                root=new File(root, files[i]);
            }
            return root.toString();
            */
            return Paths.get(
                    files[0],
                    Arrays.copyOfRange(files, 1, files.length)
            ).toString();
        }
        public static boolean exists(String file){
            return new File(file).exists();
        }
        public static boolean isdir(String file){
            return new File(file).isDirectory();
        }
        public static boolean isfile(String file){
            return new File(file).isFile();
        }        
    }
}

列出檔案目錄

底下的代碼可以把指定的目錄及其子目錄一併列印出來。

import java.util.List;
import net.ddns.mahaljsp.os;
public class ListFile {
    public static void main(String[] args) {
        os.utf8();
        var dir = os.walk("d:/pictures");
        os.print(dir);
        System.out.println(dir.size());

合併目錄

底下代碼可以將二個,三個, ….. 等目錄合併成一個目錄。

import java.util.List;
import net.ddns.mahaljsp.os;
public class ListFile {
    public static void main(String[] args) {
        os.utf8();
        String path=os.path.join("c:/javadir","dir_001", "a.txt");
        System.out.println(path);

刪除目錄及檔案

底下代碼,可以將指定的目錄刪除。請注意,這個非常危險,就算指定目錄下有東西,一併刪除。

import java.util.List;
import net.ddns.mahaljsp.os;
public class ListFile {
    public static void main(String[] args) {
        os.utf8();
        os.rmdirs("c:/javadir");
}

todo

todo

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *