JAVA檔案操作知識
前言:做Web開發,使用者能上傳頭像,檔案等等,需要用到檔案操作。
一、File類
1.File類作用是什麼:JAVA除了8個基本資料型別都是物件。物件都有自己的類,類是對某一類東西的概述。比如persion類,它的屬性有name,age,sex等。同理,File類就是對檔案的描述(檔案包括目錄)。File類裡面有方法。注意:File類是對檔案的概敘,沒包括裡面的資料,所以我們只能對檔案增刪改查,對裡面的資料File類無法操作。
(1)建立檔案
注意:裡面用到了junit,junit相當於不用main方法,就能執行方法,如果使用junit,得匯入org.junit.test包
@Test
public void createFile() throws IOException {
File f = new File("D:\\java.txt");
f.createNewFile();
}
(2)建立目錄
注意:建立目錄,目錄名一般不需要字尾,如果不刪除.txt,會建立出java.txt這個名字得目錄
@Test
public void createDirectory() throws IOException {
File f = new File("D:\\java");
f.mkdir();
}
二、位元組流
位元組流的作用是什麼:位元組流能對檔案裡面的資料進行操作。
1.FileInputStream類(讀取檔案類容)
注意:檔案內容讀取是已記憶體為參照物,內容從硬碟到記憶體叫Input,而且最後一定要關閉位元組流。
@Test
public void read2Java() throws IOException {//該方法為一個一個的讀,效率很慢
FileInputStream fs = new FileInputStream("D:\\java.txt");
long len = 0;
while((len = fs.read()) != -1) {
char c = (char) len;
System.out.print(c);
}
fs.close();
}
2.FileOutputStream類(寫入檔案)
注意:檔案內容寫入是已記憶體為參照物,內容從記憶體到硬碟叫Output,而且最後一定要關閉位元組流。
@Test
public void java2File() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\java.txt");
fos.write("123".getBytes());
fos.close();
}
3.BufferedInputStream(讀取檔案)
注意:檔案內容讀取是已記憶體為參照物,內容從硬碟到記憶體叫Input,而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
@Test
public void File2Java() throws IOException {
FileInputStream fis = new FileInputStream("D:\\java.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
while(bis.read(b) != -1) {
System.out.println(new String(b));
}
bis.close();
fis.close();
}
4.BufferedOutputStream(寫入檔案)
注意:檔案內容寫入是已記憶體為參照物,內容從硬碟到記憶體叫Output,而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
@Test
public void java2File() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\java.txt");
BufferedOutputStream bop = new BufferedOutputStream(fos);
bop.write("123".getBytes());
bop.close();
fos.close();
}
5.帶Buffered和不帶Buffered有什麼區別
帶Buffered的是緩衝位元組輸入流或者是緩衝位元組輸出流,它的效率比不帶Buffered的效率快很多。
6.序列化和物件流
注意:想要物件寫入文字,,該物件必須實現Serializable介面,改介面為空介面,叫做標誌性介面。而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
每個實現Serializable介面的類都有唯一編號,編號由屬性名+時間戳計算得來。
6.1物件寫入文字
@Test
public void obj2File() throws IOException {
FileOutputStream fos = new FileOutputStream("D:\\java.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Map<String, String> m = new HashMap<String, String>();
m.put("1", "a");
m.put("2", "b");
oos.writeObject(m);
oos.close();
fos.close();
}
6.2讀入文字里存的物件
注意:檔案內容寫入是已記憶體為參照物,內容從硬碟到記憶體叫Output,而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
@Test
public void obj2File() throws Exception {
FileInputStream fos = new FileInputStream("D:\\java.txt");
ObjectInputStream oos = new ObjectInputStream(fos);
Map<String, String> m = new HashMap<String, String>();
m = (Map<String, String>) oos.readObject();
System.out.println(m);
oos.close();
fos.close();
}
三、字元流
字元流有什麼作用:字元流是操所文字資料的。
1.FileReader(讀取檔案內容)
注意:檔案內容讀取是已記憶體為參照物,內容從硬碟到記憶體叫Read,而且最後一定要關閉位元組流。
@Test
public void file2Java() throws Exception {
FileReader fr = new FileReader("D:\\java.txt");
int len = 0;
while((len = fr.read()) != -1) {//一個字元一個字元的讀
System.out.print((char)len);
}
fr.close();
}
2.FileWriter (寫入檔案)
注意:檔案內容寫入是已記憶體為參照物,內容從記憶體到硬碟叫Write,而且最後一定要關閉位元組流。
@Test
public void java2File() throws Exception {
FileWriter fw = new FileWriter("D:\\java.txt");
fw.write("abc");
fw.close();
}
3.BufferedReader(讀取內容檔案)
注意:檔案內容讀取是已記憶體為參照物,內容從硬碟到記憶體叫Read,而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
@Test
public void java2File() throws Exception {
FileReader fw = new FileReader("D:\\java.txt");
BufferedReader br = new BufferedReader(fw);
String str = null;
while((str = br.readLine())!= null){
System.out.println(str);
}
br.close();
fw.close();
}
4.BufferedWriter(寫入檔案)
注意:檔案內容寫入是已記憶體為參照物,內容從硬碟到記憶體叫Writer,而且最後一定要關閉位元組流,關的順序是後建立的先關閉,類似穿衣服,先穿的衣服,脫得時候最後脫。
@Test
public void java2File() throws Exception {
FileWriter fw = new FileWriter("D:\\java.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("中國");
bw.close();
fw.close();
}
四、位元組流和字元流的區別
1.位元組流對於所有格式檔案都能操錯,而字元流只能操作文字,不然會出現奇怪的東西。
五、檔案操作的面試題
1.什麼是序列化?怎麼才能序列化?
序列化是物件轉換成位元組。要序列化得實現Serializable介面
2.位元組流和字元流得區別
答案在第四板塊。
相關文章
- Python入門教程之檔案讀寫操作知識Python
- Python基礎知識之檔案的讀取操作Python
- Java 檔案 IO 操作Java
- 【知識分享】linux伺服器目錄檔案的命令操作Linux伺服器
- Python基礎知識_第10節_檔案操作(IO技術)Python
- C# 基礎知識系列- 14 IO篇 檔案的操作C#
- Java : File 檔案類操作Java
- Java操作PDF檔案之ITextJava
- Java NIO Path介面操作檔案Java
- Java 檔案 IO 操作之 DirectIOJava
- Python基礎知識詳解 從入門到精通(六)檔案操作Python
- [基礎知識] Redis 配置檔案Redis
- java 檔案的操作(Path、Paths、Files)Java
- Java審計之檔案操作漏洞Java
- JAVA類檔案操作和異常Java
- Linux檔案管理知識:文字處理Linux
- 關於Java使用MinIO檔案伺服器操作檔案Java伺服器
- Java對檔案的操作及UDP,TCPJavaUDPTCP
- Java7 新特性 —— java.nio.file 檔案操作Java
- 檔案操作
- 初識Java Java基礎知識Java
- 11.9Linux檔案管理知識:文字處理Linux
- Linux——檔案傳輸協議知識點梳理Linux協議
- Android知識點回顧之Manifest檔案-上篇Android
- 使用import csv檔案方式建立知識圖譜Import
- java安全編碼指南之:檔案IO操作Java
- Java知識整理Java
- Java中使用jcifs庫操作SMB協議進行檔案操作Java協議
- C檔案與檔案的操作
- Java實現FTP跨伺服器檔案操作JavaFTP伺服器
- Java 對 properties 檔案操作 (ResourceBundle 類和 Properties 類)Java
- java IO流 對檔案操作的程式碼集合Java
- 05 檔案操作
- 2.8檔案操作
- 檔案IO操作
- linux 檔案操作Linux
- Python操作檔案Python
- 檔案操作(下)