Java本地文件操作
概述:Java本地文件操作,涉及到文件/文件夾的創建,文件/文件夾屬性的讀取與設置,文件/文件夾的重命名,目錄結構的遍歷,以及文件內容的讀取與寫入。
File屬于java.io.File。
---在Eclipse的大綱視圖界面(Outline)中有綠色點的是用public修飾的方法,黃色代表protected方法,藍色代表包方法,紅色代表private方法。
---------------------------------------------------------------------------------------------------------------------------------------------
File類常用的方法:
構造方法:
File(String)
File(String,String)
File(File,String)
File(URI)
其他:
getName():String獲取文件名
getParent():String獲取上一級文件的路徑
getParentFile():File返回父級文件
getPath():String獲取文件的路徑
isAbsolute():boolean判斷是否為絕對路徑
getAbsolutePath():String獲取絕對路徑
getAbsoluteFile():File獲取絕對路徑的File對象
toURL():URL轉化為URL
toURI():URI轉化為URI
canRead():boolean判斷是否可讀
canWrite():boolean判斷是否可寫
exists():boolean判斷文件是否存在
isDirectory():boolean判斷是否是一個文件夾
isFile():boolean判斷是否是文件
isHidden():boolean判斷文件是否隱藏
length():long得到文件的長度
createNewFile():boolean將File對象創建為一個真正的文件
delete():boolean刪除文件
deleteOnExit():void當程序退出時刪除文件
list():String[]列出文件(名稱)
listFiles():File[]列出文件的列表
mkdir():boolean創建文件夾
mkdirs():boolean創建多級文件夾
renameTo(File):boolean將文件重命名
setReadOnly():boolean將文件設置為只讀
setWritable(boolean):boolean將文件設置為可寫
canExecute():boolean判斷文件是否在當前操作系統中可執行
createTempFile(String,String,File):File創建臨時文件
compareTo():int文件的對比
----------------------------------------------------------------------------------------------------------------------------------------
注意:File對象既可以指代一個文件,也可以指代一個文件夾,實際上File對象更像是表示文件或文件夾的路徑。
? ?創建File對象時傳入文件名稱(帶后綴名)如果沒有指定路徑的話,那么文件會默認為當前項目的根目錄下。
? ?在填寫File構造方法中參數的相對路徑時,一定不要以"/"開頭。
? ? ?../代表上一級文件夾,也就是工程項目的上一級。../../代表上一級的上一級,兩級向上跳轉,“./”代表當前目錄。
----------------------------------------------------------------------------------------------------------------------------------------
renameTo方法的效果更像是一種文件的移動,將文件移動到指定路徑的同時進行文件名的變更,但是值得注意的是,
renameTo方法必須在同一分區中進行,比如windows系統中的不同盤區,跨盤區執行renameTo方法就是不允許的。而linux系統就不會收這個限制。
如果非要進行跨區的文件移動,就需要用拷貝的相關方法,而不是文件的重命名。
-------------------------------------------------------------------------------------------------------------------------------------------
在刪除文件夾的時候,此文件夾必須是空文件夾,否則不能被刪除。
---------------------------------------------------------------------------------------------------------
常用的文件屬性讀取:
File file = new File("test.txt");
//判斷文件是否存在
file.exists()
//讀取文件名稱
file.getName()//這里注意:獲取到的文件名一定是前面Java聲明的file對象的名字
//讀取文件路徑
file.getPath()//相對路徑
//讀取文件絕對路徑
file.getAbsolutePath()
//讀取文件父級路徑
new File(file.getAbsolutePath).getParent()//注意,因為file對象是通過
相對路徑進行構造的,因此,在調用getParent()方法時會返回null,因此我們
需要獲取到file的絕對路徑之后,才可以獲取到file的父級路徑。
//讀取文件大小
file.length()//返回值是long型的數值,是字節(byte)
//判斷文件是否被隱藏。
file.isHidden()
//判斷文件是否可讀
file.canRead()
//判斷文件是否可寫
file.canWrite()
//判斷是否為文件夾
file.isDirectory()
------------------------------------------------------------------------------------------------------------------------
package crc16test;import java.io.File;public class Scannner {public static void main(String[] args) {printFiles(new File("../crc-16"), 1);}/*** 文件打印* @param dir* @param tab 文件縮進*/public static void printFiles(File dir, int tab) {//這種打印方式,可以輸出系統的隱藏文件if (dir.isDirectory()) {File next[] = dir.listFiles();for (int i = 0; i < next.length; i++) {for (int j = 0; j < tab; j++) {System.out.print("|--");}System.out.println(next[i].getName());if (next[i].isDirectory()) {printFiles(next[i], tab + 1);}}}} } 輸出結果: |--.classpath |--.project |--.settings |--|--org.eclipse.core.resources.prefs |--|--org.eclipse.jdt.core.prefs |--bin |--|--crc16test |--|--|--Converters.class |--|--|--CRC.class |--|--|--Crc16.class |--|--|--HelloFile.class |--|--|--MyOuter$MyInner.class |--|--|--MyOuter.class |--|--|--ReadAndWriteFile.class |--|--|--room.html |--|--|--Scannner.class |--|--|--SetProperty.class |--|--|--Solution.class |--|--|--sss.txt |--json.jar |--newFile.txt |--src |--|--crc16test |--|--|--Converters.java |--|--|--CRC.java |--|--|--Crc16.java |--|--|--HelloFile.java |--|--|--MyOuter.java |--|--|--ReadAndWriteFile.java |--|--|--room.html |--|--|--Scannner.java |--|--|--SetProperty.java |--|--|--Solution.java |--|--|--sss.txt |--text.txt ----------------------------------------------------------------------------------------------------------------------------------------------------------------------package crc16test;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException;public class ReadAndWriteFile {public static void main(String[] args) {File file = new File("text.txt");/* 文件的輸入 */if (file.exists()) {System.err.println("exist");try {// 1.創建一個文件輸入流FileInputStream fis = new FileInputStream(file);// 2.創建文件輸入流的Reader/*** InputStreamReader有多個構造器,但是因為FileInputStream是字節輸入流,* 而InputStreamReader是字符輸入流,因此在調用構造器時,我們選擇帶有字符編碼的* 構造器,否則會出現亂碼。另外注意,文件默認為GBK編碼,在創建文件的時候應當先設置好字符* 編碼為UTF-8,這樣好統一前后的編碼。*/InputStreamReader isr = new InputStreamReader(fis, "UTF-8");// 3.創建一個帶有緩沖的輸入流BufferedReader br = new BufferedReader(isr);String line;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();isr.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} else {System.err.println("THE FILE DOES NOT EXIST");}/* 文件的輸出 *///文件的輸出不必擔心文件是否存在的問題,因為程序會自動進行文件的創建File newFile = new File("newFile.txt");try {FileOutputStream fos = new FileOutputStream(newFile);OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");BufferedWriter bw = new BufferedWriter(osw);// 注意,這種寫入方式,是覆蓋性的。bw.write("123\n");bw.write("456\n");bw.close();osw.close();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("寫入完成。");} }
輸出結果:
exist 長恨歌 一二三四五六,一二三四五六。 六五四三二一,六五四三二一。 一二三四五六,一二三四五六。 六五四三二一,六五四三二一。 寫入完成。總結
以上是生活随笔為你收集整理的Java本地文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7下docker启动失败解决
- 下一篇: 奥特曼系列ol服务器名称带怪兽,《奥特曼