Java学习之文件操作
前言
因為文件操作是一個非常常見的操作,在加上用法非常固定,就寫一篇博客整理一下
我直接用一個小項目說明文件操作的方法,當(dāng)然主要還是去看官方的api文檔是最好的
我的一個demo程序是監(jiān)聽一個目錄下的所有文件,把每一個讀取每一個文件的內(nèi)容,然后再將其復(fù)制到另外一個目錄下。
本博客原創(chuàng),轉(zhuǎn)載請注明!!!
本文鏈接
個人博客:https://ronglin.fun/?p=143
PDF鏈接:見博客網(wǎng)站
CSDN: https://blog.csdn.net/RongLin02/article/details/118736944
以下實操均是我自己寫的小demo,如有錯誤請聯(lián)系我!
查詢的API內(nèi)容來自以下網(wǎng)站,僅用于學(xué)習(xí),如有侵權(quán)請聯(lián)系我刪除
一個中文API:MaTools在線中文API-JDK8
File類
對于文件的操作,我一般用File類,對于文件本身內(nèi)容的操作,一般用輸入輸出流來完成。
有兩個概念是要知道的,一個是絕對路徑,還有一個是相對路徑。
常用方法
1.構(gòu)造方法
//從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例。 File(File parent, String child)//通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例。 File(String pathname)//從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例。 File(String parent, String child)//通過將給定的 file: URI轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例。 File(URI uri)一共四種構(gòu)造方法,可根據(jù)需要選擇不同的方式創(chuàng)建File類
2.增刪改查
//當(dāng)且僅當(dāng)具有該名稱的文件尚不存在時,原子地創(chuàng)建一個由該抽象路徑名命名的新的空文件。 boolean createNewFile()//刪除由此抽象路徑名表示的文件或目錄。 boolean delete()//測試此抽象路徑名表示的文件或目錄是否存在。 boolean exists()//測試此抽象路徑名表示的文件是否為目錄。 boolean isDirectory()//測試此抽象路徑名表示的文件是否為普通文件。不是目錄,并且另外滿足其他依賴于系統(tǒng)的條件 boolean isFile()//創(chuàng)建由此抽象路徑名命名的目錄。 boolean mkdir()//重命名由此抽象路徑名表示的文件。 boolean renameTo(File dest)//返回一個字符串?dāng)?shù)組,命名由此抽象路徑名表示的目錄中的文件和目錄。 String[] list() //返回一個字符串?dāng)?shù)組,命名由此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。 String[] list(FilenameFilter filter) //返回一個抽象路徑名數(shù)組,表示由該抽象路徑名表示的目錄中的文件。 File[] listFiles() //返回一個抽象路徑名數(shù)組,表示由此抽象路徑名表示的滿足指定過濾器的目錄中的文件和目錄。 File[] listFiles(FileFilter filter) //返回一個抽象路徑名數(shù)組,表示由此抽象路徑名表示的滿足指定過濾器的目錄中的文件和目錄。 File[] listFiles(FilenameFilter filter)此外還有很多常用的方法,例如獲取絕對路徑之類的,api中很詳細(xì),不再列出。
IO流
對于文件的讀寫,我一般習(xí)慣用這幾個FileInputStream,FileOutputStream,FileReader,FileWriter四種流.
當(dāng)然,用其他的流也是一樣的
注意,所有流用完之后要記得close()
讀文件
首先是讀文件
FileInputStream
FileInputStream從文件系統(tǒng)中的文件獲取輸入字節(jié)。 什么文件可用取決于主機(jī)環(huán)境。
FileInputStream用于讀取諸如圖像數(shù)據(jù)的原始字節(jié)流。 要閱讀字符串,請考慮使用FileReader 。
構(gòu)造方法
//通過打開與實際文件的連接創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的 File對象 file命名。 FileInputStream(File file) //創(chuàng)建 FileInputStream通過使用文件描述符 fdObj ,其表示在文件系統(tǒng)中的現(xiàn)有連接到一個實際的文件。 FileInputStream(FileDescriptor fdObj) //通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的路徑名 name命名。 FileInputStream(String name)常用方法
//關(guān)閉此文件輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 void close()//從該輸入流讀取一個字節(jié)的數(shù)據(jù)。 int read() //從該輸入流讀取最多 b.length個字節(jié)的數(shù)據(jù)為字節(jié)數(shù)組。 int read(byte[] b) //從該輸入流讀取最多 len字節(jié)的數(shù)據(jù)為字節(jié)數(shù)組。 int read(byte[] b, int off, int len)實操代碼
static final int MAX = 1024*1024; int len = 0 ; byte[] buff = new byte[MAX]; StringBuffer buffer = new StringBuffer(); String text = null;String path = "F:\Desktop\test.txt"; FileInputStream input = null ;try {input = new FileInputStream(path); } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace(); }//讀取txt文件 try {while(( (len = input.read(buff) )!= -1 )){buffer.append(new String(buff,0,len,"utf-8"));} } catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace(); }text = buffer.toString();System.out.println("text :");System.out.println(text+"\n"); try {input.close(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); }FileReader
閱讀字符文件的便利課。
該類的構(gòu)造函數(shù)假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小是適當(dāng)?shù)摹?要自己指定這些值,請在FileInputStream上構(gòu)造一個InputStreamReader。
FileReader是用于讀取字符流。 要讀取原始字節(jié)流,請考慮使用FileInputStream 。
構(gòu)造方法
//創(chuàng)建一個新的 FileReader ,給出 File讀取 FileReader(File file) //創(chuàng)建一個新的 FileReader ,給定 FileDescriptor讀取。 FileReader(FileDescriptor fd) //創(chuàng)建一個新的 FileReader ,給定要讀取的文件的名稱。 FileReader(String fileName)常用方法
public class FileReader extends InputStreamReaderMethods inherited from class java.io.InputStreamReader
因為是繼承了InputStreamReader類,方法都類似
寫文件
FileOutputStream
文件輸出流是用于將數(shù)據(jù)寫入到輸出流File或一個FileDescriptor 。
文件是否可用或可能被創(chuàng)建取決于底層平臺。 特別是某些平臺允許一次只能打開一個文件來寫入一個FileOutputStream (或其他文件寫入對象)。 在這種情況下,如果所涉及的文件已經(jīng)打開,則此類中的構(gòu)造函數(shù)將失敗。
FileOutputStream用于寫入諸如圖像數(shù)據(jù)的原始字節(jié)流。 對于寫入字符流,請考慮使用FileWriter
構(gòu)造方法
//創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件。 FileOutputStream(File file) //創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件。如果第二個參數(shù)是true ,則字節(jié)將寫入文件的末尾而不是開頭 FileOutputStream(File file, boolean append) //創(chuàng)建文件輸出流以寫入指定的文件描述符,表示與文件系統(tǒng)中實際文件的現(xiàn)有連接。 FileOutputStream(FileDescriptor fdObj) //創(chuàng)建文件輸出流以指定的名稱寫入文件。 FileOutputStream(String name) //創(chuàng)建文件輸出流以指定的名稱寫入文件。如果第二個參數(shù)是true ,則字節(jié)將寫入文件的末尾而不是開頭。 FileOutputStream(String name, boolean append)常用方法
//關(guān)閉此文件輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 void close()//將 b.length個字節(jié)從指定的字節(jié)數(shù)組寫入此文件輸出流。 void write(byte[] b) 將 len字節(jié)從位于偏移量 off的指定字節(jié)數(shù)組寫入此文件輸出流。 void write(byte[] b, int off, int len) 將指定的字節(jié)寫入此文件輸出流。 void write(int b)實操代碼
FileOutputStream output = null ; String path = "F:\Desktop\test.txt"; String text = "123"; try {output = new FileOutputStream(path); } catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace(); }try {output.write(text.getBytes()); } catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace(); } try {output.close(); } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace(); }FilterWriter
方便課寫字符文件。 該類的構(gòu)造函數(shù)假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小是可以接受的。 要自己指定這些值,請在FileOutputStream上構(gòu)造一個OutputStreamWriter。
文件是否可用或可能被創(chuàng)建取決于底層平臺。 特別是某些平臺允許一次只能打開一個文件來寫入一個FileWriter (或其他文件寫入對象)。 在這種情況下,如果所涉及的文件已經(jīng)打開,則此類中的構(gòu)造函數(shù)將失敗。
FileWriter是用于寫入字符流。 要編寫原始字節(jié)流,請考慮使用FileOutputStream 。
構(gòu)造方法
//給一個File對象構(gòu)造一個FileWriter對象。 FileWriter(File file) //給一個File對象構(gòu)造一個FileWriter對象。 FileWriter(File file, boolean append) //構(gòu)造與文件描述符關(guān)聯(lián)的FileWriter對象。 FileWriter(FileDescriptor fd) //構(gòu)造一個給定文件名的FileWriter對象。 FileWriter(String fileName) //構(gòu)造一個FileWriter對象,給出一個帶有布爾值的文件名,表示是否附加寫入的數(shù)據(jù)。 FileWriter(String fileName, boolean append)常用方法
public class FileWriter extends OutputStreamWriterMethods inherited from class java.io.OutputStreamWriter
因為是繼承了OutputStreamWriter類,方法都類似
源代碼
我的一個demo程序:
監(jiān)聽一個目錄下的所有txt文件,讀取每一個文件的內(nèi)容,然后再將其復(fù)制到另外一個目錄下。
總結(jié)
以上是生活随笔為你收集整理的Java学习之文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统课设之Linux 进程间通信
- 下一篇: c语言高低位拷贝_C语言中的大小端转换与