路行分隔符號
在 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
