输入输出流(I/O)
一.流概述
? ? 流是一組有序的數據序列,根據操作的類型,可分為輸入流和輸出流兩種。I/O流提供了―條通道程序,可以使用這條通道把源中的字節序列送到目的地,雖然I/O流經常與磁盤文件存取有關,但是程序的源和目的地也可以是鍵盤鼠標、內存或顯示器窗口等。
Java由數據流處理輸入輸出模式,程序從指向源的輸入流中讀取源中的數據。源可以是文件、網絡、壓縮包或者其他數據源。
輸出流的指向是數據要到達的目的地,程序通過向輸出流中寫入數據把信息傳遞到目的地。輸出流的目標可以是文件、網絡、壓縮包、控制臺和其他數據輸出目標。
二.輸入輸出流I/O
? ? 1.輸入流
? ? ? InputStream?類是字節輸入流的抽象類,是所有字節輸入流的父類。
該類中所有方法遇到錯誤時都會引發IOException異常。下面是對該類中的一些方法的簡要說明:
?2.輸入流
? ? ? OutputStream類是字節輸入流的抽象類,此抽象類表示輸出字節流的所有類的超類。
OutputStream類中的所有方法均返回void,在遇到錯誤時會引發IOException異常。
?Writer類是字符輸出流的抽象類,所有字符輸出類的實現都是它的子類。
?3.特點
? ? ??以數據為基準,根據數據的流動方向來確定是輸入還是輸出流。
三.文件構造
? ? File類是io包中唯一代表磁盤文件本身的對象。File類定義了一些與平臺無關的方法來操作文件,可以通過調用File類中的方法實現創建、刪除重命名文件等。File類的對象主要用來獲取文件本身的一些信息,如文件所在的目錄、文件的長度、文件讀寫權限等。數據流可以將數據寫入到文件中而文件也是數據流最常用的數據媒體。?
? ? 1.構造方法
? ? ? ? ? ? ?new ?File(文件全路徑)
? ? 或 ? ? ?new File(文件路徑,文件名)
? ? 2.方法
? ? ? (1)exists() ?判斷是否存在;(2)createNewFile() ?創建新文件,如果文件已存在,不會覆蓋原文件;(3)getName ?獲取文件名;(4)delete() 刪除;(5)renameTo(File對象) 修改路徑及文件名。?
File的構造:
import java.io.*;public class TestFile {public static void main(String[] args) {//構建File實例,指向了硬盤上的一個文件File file =new File("d:\\test.txt");file =new File("d:\\", "test1.txt");//判斷文件是否存在if(file.exists()){System.out.println(file.getName()+"文件已存在");System.out.println(file.getAbsolutePath());//改名file.renameTo(new File("g:\\text2.txt"));try {if(file.createNewFile()){System.out.println("創建文件成功");}else{System.out.println("創建文件失敗");}} catch (IOException e) {System.out.println(e.getMessage());e.printStackTrace();}// if(file.delete()) // { // System.out.println("刪除成功"); // } // else // { // System.out.println("刪除失敗"); // } }else{System.out.println(file.getName()+"文件不存在");//創建try {if(file.createNewFile()){System.out.println("創建文件成功");}else{System.out.println("創建文件失敗");}} catch (IOException e) {System.out.println(e.getMessage());e.printStackTrace();}}}} File?
文件輸入/輸出流
程序運行期間,大部分數據都是在內存中進行操作,當程序結束或關閉時,這些數據將消失。如果需要將數據永久保存,可使用文件輸入輸出流與指定的文件建立連接,將需要的數據永久保存到文件中。
??1.字節輸入輸出流
FileInputStream類與FileOutputStream類都是用來操作磁盤文件的。如果用戶的文件讀取需求比較簡單,則可以使用FileInputStream類。該類繼承自InputStream類。 FileInputStream類與FileOutputStream類對應,提供了基本的文件寫入能力。FileOutputStream類是OutputStream類的子類。
FileInputStream類常用的構造方法如下:
FileInputStream(String name)
FileInputStream(File file)
第一個構造方法使用給定的文件名name創建—個FileInputStream對象,第二個構造方法使用File對象創建FileInputStream對象。第一個構造方法比較簡單,但第二個構造方法允許在把文件連接輸入流之前對文件作進一步分析。
FileInputStream類與FileOutputStream類相同參數的構造方法,創建一個FileOutputStream對象時,可以指定不存在的文件名,但此文件不能是—個已被其他程序打開的文件。
注意:雖然Java語言在程序結束時自動關閉所有打開的流,但是當使用完流后,顯式地關閉任何打開的流仍是一個好習慣。一個被打開的流有可能會用盡系統資源,這取決于平臺和實現。如果沒有將打開的流關閉,當另一個程序試圖打開另一個流時,這些資源可能會得不到。
FileInputStream類與FileOutputStream類方法代碼:
package com.hanqi;import java.io.*;public class TestFile1 {public static void main(String[] args) {File f1=new File("d:\\test.txt");if(f1.exists()){System.out.println("文件已存在");//輸入輸出D//向硬盤上的文件輸出文字try {//構造方法 1.傳入File實例 2.傳入文件名FileOutputStream fo=new FileOutputStream(f1);String str="大家好";//以字節數組的形式寫入byte[] b=str.getBytes();fo.write(b);//寫入fo.close();//關閉輸出流,釋放文件//從硬盤文件讀入文字//構造方法,指明從哪個文件讀入FileInputStream fi=new FileInputStream(f1);//用來裝載讀入的數據,事先指定一個默認大小byte[] c=new byte[1024];//返回值表示讀入數據的長度//傳入引用類型int i=fi.read(c);//轉換指定位數的字符串String str1=new String(c,0,i);System.out.println("讀入的內容長度="+str1.length());System.out.println("讀入的內容="+str1);} catch (FileNotFoundException e) {System.out.println("要輸出的文件不存在");e.printStackTrace();} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();}}else{try {if(f1.createNewFile()){System.out.println("文件創建成功");}} catch (IOException e) {e.printStackTrace();}}}} FileInputStream、FileOutputStream 1 package com.hanqi;import java.io.*;public class TestFile2 {public static void main(String[] args) {try {//覆蓋寫入//true 追加寫入FileOutputStream fos=new FileOutputStream("d:\\test.txt",true);String str="\n心情不錯!";fos.write(str.getBytes());fos.close();FileInputStream fis=new FileInputStream("d:\\test.txt");byte[] b=new byte[200];int i=fis.read(b);String str1=new String(b,0,i);System.out.println("讀取內容:"+str1);fis.close();} catch (Exception e) {// TODO 自動生成的 catch 塊e.printStackTrace();}}} FileInputStream、FileOutputStream 2 2.字符輸入輸出流
使用FileOutputStream類向文件中寫入數據與使用FileInputStream類從文件中將內容讀出來,存在一點不足,即這兩個類都只提供了對字節或字節數組的讀取方法。由于漢字在文件中占用兩個字節,如果使用字節流,讀取不好可能會出現亂碼現象。此時采用字符流FileReader或FileWriter類即可避免這種現象。
FileReader、FileWriter字符流對應了FileInputStream、FileOutputStream。FileReader流順序地讀取文件,只要不關閉流。每次調用read()方法就順序地讀取源中其余的內容,直到源的末尾或流被關閉。
?
轉載于:https://www.cnblogs.com/panyiquan/p/5281373.html
總結
以上是生活随笔為你收集整理的输入输出流(I/O)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用docker镜像搭建svn+Apac
- 下一篇: axis2+myeclipse6.5环境