Java IO流(上)
阿新 • • 發佈:2018-11-01
IO流的基本介紹,輸出檔案屬性:
import java.io.File;
public class Application {
public static void main(String[] args) {
// 通過IO流 把程式中的資料儲存到硬碟上 以及讀取硬碟上的資料到程式內。
//IO = Input(從硬碟讀取資料到程式) 和 Output(把程式資料儲存到硬碟)
//流:在程式和硬碟之間搭建一個管道,用來傳輸資料,
// 體積比較大的資料,會被拆分為許多很小的模組,進行傳輸 ,叫做資料流
//File 類 表示因硬碟上的一個檔案
//路徑分隔符使用 / 或者 \\
File file = new File("S:/111.txt");
//通過 get方法可以獲取檔案的各種屬性,例如:
System.out.println(file.lastModified());//最後一次修改時間
System.out.println(file.getName());//檔名字
System.out.println(file.getParentFile());//所在資料夾名稱
System.out.println(file.getPath());//檔案路徑
//特殊的方法
System.out.println("檔案是否存在:" + file.exists());
//檔案 = 普通檔案 + 資料夾(目錄)
System.out.println("檔案是否是目錄:" + file.isDirectory());
//對於目錄來說
File file2 = new File ("S:/");
System.out.println("檔案是否是目錄:" + file2.isDirectory());
//獲取這個目錄中儲存的所有檔案
File[] file2s = file2.listFiles();
for (File file3 : file2s) {
//輸出所有檔名
//System.out.println("——" + file3.getName());
if (file3.isDirectory()) {
//輸出目錄名字
System.out.println("——" + file3.getName());
}
}
}
}
小練習,輸出目錄中的子目錄中的檔案(面試題):
import java.io.File;
public class Application2 {
public static void main(String[] args) {
// 寫一個方法 輸出某個目錄下的所有檔名字,包括子目錄中的檔名字
File file = new File("S:/");
//輸出d盤下所有檔案路徑
printFilePath(file);
}
//輸出指定目錄中,所有的檔案路徑
public static void printFilePath(File file) {
//獲取當前目錄中的 所有檔案
File[] files = file.listFiles();
//獲取每一個檔案
if (files != null) {
for (File f : files) {
if(f.isDirectory()) {
//如果是目錄,獲取目錄中的所有檔案
printFilePath(f);//在方法內部呼叫方法自身的寫法叫遞迴
}else {
//普通檔案
System.out.println(f.getPath());
}
}
}
}
}
建立 目錄檔案:
import java.io.File;
import java.io.IOException;
public class Application3 {
public static void main(String[] args) {
File f1 = new File("S:/222.txt"); //普通檔案
File f2 = new File("S:/333/444/555"); //目錄
File f3 = new File("S:/666"); //目錄
try {
//建立普通檔案
f1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
f2.mkdirs();//建立目錄 +s的可以建立333/444... 不+s 只能建立333
f3.mkdir();//不+s 只能建立666
}
}
通過IO 流 進行資料的讀寫操作:
寫入:
import java.io.FileWriter;
import java.io.IOException;
public class Application4 {
public static void main(String[] args) {
//通過IO 流 進行資料的讀寫操作
//IO 按照用途分為: InputStream 和 OutputStream
//IO 按照型別分為: 位元組流 和 字元流
//字元流以字元(char = 2 byte)為單位傳輸資料,用來讀取文字內容
//位元組流以位元組(byte = 8位)為單位傳輸資料 ,用來讀寫非文字內容(如 圖片,視訊)
//字元流:Reader 和 Writer 兩個抽象類是所有字元流的輸入輸出的父類
//比較常用的子類是 FileReader 和 FileWriter
//向S:/111.txt 中寫入內容
try {
FileWriter fw = new FileWriter("S:/111.txt",true);//true 追加模式,不會覆蓋,預設覆蓋
fw.write("\r\n");//換行
fw.write("謝特");//寫入內容
fw.close();//使用完關閉流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
讀取:
import java.io.FileReader;
import java.io.IOException;
public class Application5 {
public static void main(String[] args) {
//讀取 S:/111.txt 中的文字
try {
FileReader fr = new FileReader("S:/111.txt");
// 只能讀取固定數目的字元
// //裝載從檔案中讀取到的字元
// char[] chars = new char[50];
//
// //從文錢中讀取char.length 個字元,放入chars 中
// fr.read(chars);
//
// //把讀取的字元從char[] 轉換為字串
// String line = new String(chars);
// System.out.println(line);
//
//通過迴圈 讀取所有的內容
//裝在讀取內容讓那個的容器
char[] chars = new char[1024];//常用大小是1024,效率高
//記錄讀取到哪個字元
int length = -10001010;//區域性變數必須設定成預設值才能使用
//length = fr.read(chars);返回值是這次讀取到了多少個字元
//length != -1; 如果到了文章末尾沒有讀取到任何內容 返回-1
// 返回-1,說明所有內容都已經讀取完畢
//用來拼接每次讀取的內容
StringBuffer sb = new StringBuffer();
while((length = fr.read(chars)) != -1) {
//把char[] 中 指定範圍的字元轉化為字串
String line = new String(chars, 0,length);//捨棄後面多餘的讀數
//把每次讀取的內容拼接在一起
sb.append(line);
}
//StringBuffer轉 String
String text = sb.toString();
System.out.println(text);
//關閉流
fr.close();
} catch (IOException e) { //修改成IO 導包
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}