Java基础学习—— IO流
生活随笔
收集整理的這篇文章主要介紹了
Java基础学习—— IO流
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java基礎學習—— IO流
- 1 文件
- 1.1 文件的創建
- 1.2 文件常用的方法
- 2 IO流
- 2.1 FileInputStream
- 2.2 FileOutputStream
- 2.3 文件的拷貝
- 2.4 FileReader
- 2.5 FileWriter
- 2.6 BufferedReader
- 2.7 BufferedWriter
- 2.9 ObjectOutputStream
- 2.10 ObjectInputStream
- 2.11 InputStreamReader
- 2.12 OutputStreamReader
1 文件
1.1 文件的創建
public void create01() {String filePath = "e:\\news1.txt";File file = new File(filePath);try {file.createNewFile();System.out.println("文件創建成功");} catch (IOException e) {e.printStackTrace();}}1.2 文件常用的方法
- getName:獲取文件名
- getAbsolutePath:獲取文件絕對路徑
- getParent:獲取父級目錄
- getlength:文件大小(字節)
- exists:文件是否存在
- isFile: 是不是文件
- isDirectory:是不是目錄
- delet:刪除文件
- mkdir:創建目錄
- mdirs:創建多級目錄
2 IO流
| 輸入流 | InputStream | Reader |
| 輸出流 | OutputStream | Writer |
這四個類是抽象類,其他IO流對象都是以這四個類派生出來
- 節點流:直接和數據源相接(File,String,Pipe等)
- 處理流:封裝一個節點流,使用了模擬器模式(BufferedReader,BufferedWriter等)
2.1 FileInputStream
2.2 FileOutputStream
2.3 文件的拷貝
2.4 FileReader
FileReader以字符為單位讀取文件
java中的char
java里的char類型無論何時都是2字節的,字母’A’也不例外,只是在流中就不一定了,因為不同的編碼方式有不同的規則。 unicode第一Plane總共有65536個空位,是16位的,占兩個字節,因為java僅使用了unicode的第一個Plane,所以也是16位的。 從字符流中以某種字符編碼讀取讀取字符時,會將流中的字節以某種字符編碼的機內碼規則進行解碼,并轉換為unicode的值存儲到char類型變量中;向字符流以某種字符編碼寫入字符時,會將char類型的unicode碼代表的字符以某種的字符編碼的機內碼規則進行編碼,然后將編碼后的字節寫入到目標流中。
/*** 單個字符讀取文件*/@Testpublic void readFile01() {String filePath = "e:\\story.txt";FileReader fileReader = null;int data = 0;//1. 創建FileReader對象try {fileReader = new FileReader(filePath);//循環讀取 使用read, 單個字符讀取while ((data = fileReader.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 字符數組讀取文件*/@Testpublic void readFile02() {System.out.println("~~~readFile02 ~~~");String filePath = "e:\\story.txt";FileReader fileReader = null;int readLen = 0;char[] buf = new char[8];//1. 創建FileReader對象try {fileReader = new FileReader(filePath);//循環讀取 使用read(buf), 返回的是實際讀取到的字符數//如果返回-1, 說明到文件結束while ((readLen = fileReader.read(buf)) != -1) {System.out.print(new String(buf, 0, readLen));}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}2.5 FileWriter
String filePath = "e:\\note.txt";//創建FileWriter對象FileWriter fileWriter = null;char[] chars = {'a', 'b', 'c'};try {fileWriter = new FileWriter(filePath);//默認是覆蓋寫入 // 3) write(int):寫入單個字符fileWriter.write('C'); // 4) write(char[]):寫入指定數組fileWriter.write(chars); // 5) write(char[],off,len):寫入指定數組的指定部分fileWriter.write("Curry".toCharArray(), 0, 3); // 6) write(string):寫入整個字符串fileWriter.write(" 你好哦");fileWriter.write("君子慎獨"); // 7) write(string,off,len):寫入字符串的指定部分fileWriter.write("上海天津", 0, 2);//在數據量大的情況下,可以使用循環操作.} catch (IOException e) {e.printStackTrace();} finally {//對應FileWriter , 一定要關閉流,或者flush才能真正的把數據寫入到文件try {//fileWriter.flush();//關閉文件流,等價 flush() + 關閉fileWriter.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("程序結束...");2.6 BufferedReader
對字節操作使用BufferedInputStream
public static void main(String[] args) throws Exception {String filePath = "f:\\hello.txt";//創建bufferedReaderBufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));//讀取String line; //按行讀取, 效率高//說明//1. bufferedReader.readLine() 是按行讀取文件//2. 當返回null 時,表示文件讀取完畢while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}//關閉流, 這里注意,只需要關閉 BufferedReader ,因為底層會自動的去關閉 節點流bufferedReader.close();}2.7 BufferedWriter
對字節操作使用BufferedOutputStream
public static void main(String[] args) throws IOException {String filePath = "f:\\ok.txt";//創建BufferedWriter//說明://1. new FileWriter(filePath, true) 表示以追加的方式寫入//2. new FileWriter(filePath) , 表示以覆蓋的方式寫入BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();//插入一個和系統相關的換行bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();bufferedWriter.write("你一定能夠成為你想要成為的人");bufferedWriter.newLine();//說明:關閉外層流即可 , 傳入的 new FileWriter(filePath) ,會在底層關閉bufferedWriter.close();}2.9 ObjectOutputStream
序列化:在保存數據時,保存數據的值和數據類型,要實現可序列化,必須實現Serializable或者Externalizable接口。一般使用Serializable接口(標記化的,里面沒有方法)
反序列化:恢復數據時,恢復數據的值和數據類型
對象處理流能夠將數據序列化和反序列化
public static void main(String[] args) throws Exception {//序列化后,保存的文件格式,不是純文本,而是按照他的格式來保存String filePath = "f:\\data.dat";ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));//序列化數據到 e:\data.datoos.writeInt(100);// int -> Integer (實現了 Serializable)oos.writeBoolean(true);// boolean -> Boolean (實現了 Serializable)oos.writeChar('a');// char -> Character (實現了 Serializable)oos.writeDouble(9.5);// double -> Double (實現了 Serializable)oos.writeUTF("你一定可以成為你想要成為的人");//Stringoos.close();System.out.println("數據保存完畢(序列化形式)");}2.10 ObjectInputStream
public static void main(String[] args) throws IOException, ClassNotFoundException {//指定反序列化的文件String filePath = "f:\\data.dat";ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));//讀取//1. 讀取(反序列化)的順序需要和你保存數據(序列化)的順序一致//2. 否則會出現異常System.out.println(ois.readInt());System.out.println(ois.readBoolean());System.out.println(ois.readChar());System.out.println(ois.readDouble());System.out.println(ois.readUTF());//關閉流, 關閉外層流即可,底層會關閉 FileInputStream 流ois.close();}對象處理流的注意事項
2.11 InputStreamReader
將字節流轉為字符流,用InputStreamReader可以指定編碼格式,解決亂碼的問題
public static void main(String[] args) throws IOException {String filePath = "f:\\a.txt";//1. 把 FileInputStream 轉成 InputStreamReader//2. 指定編碼 gbk//InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "gbk");//3. 把 InputStreamReader 傳入 BufferedReader//BufferedReader br = new BufferedReader(isr);//將2 和 3 合在一起BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));//4. 讀取String s = br.readLine();System.out.println("讀取內容=" + s);//5. 關閉外層流br.close();}2.12 OutputStreamReader
public static void main(String[] args) throws IOException {String filePath = "f:\\hello.txt";String charSet = "utf-8";OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath), charSet);osw.write("你好啊,笨蛋");osw.close();System.out.println("按照 " + charSet + " 保存文件成功~");}總結
以上是生活随笔為你收集整理的Java基础学习—— IO流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ip国家 数据库下载
- 下一篇: 上海市政府颁布《上海市居住证申办实施细则