java基礎之 IO流

javaIO流
 
IO流 : (input  output) 輸入輸出流 :輸入 :將文件讀到內存中 輸出:將文件從內存輸出到其餘地方。
 
IO技術的做用:主要就是解決設備和設備之間的數據傳輸問題。好比:硬盤到--->內存,內存數據--->硬盤中--->內存,內存數據--->硬盤中 把鍵盤中的數據寫入到內存。
 
將U盤中文件 拷貝到電腦中 :輸入流--->讀到內存 --->經過輸出流讀到電腦磁盤中。
 
IO的應用場景:
  好比:打卡機導出信息表
  好比:註冊的時候圖片的上傳。
  好比:下載功能
   解析XML
數據保存到本地,數據一個永久保存。數據保存到磁盤上是以文件的形式存在。因此如今學習文件的造做。
 
java中是經過File文件類來操做文件和文件夾。
 
目錄的分隔符:
   在Windows系統上目錄分隔符:\,可是Linux系統上的目錄分隔符是:/
注意點:在Windows上\或者/均可以做爲目錄的分隔符。若是你用的反斜槓
 
 
路徑問題:
   結對路徑:文件在硬盤上的完整路徑。絕對路徑通常都是以盤符開頭D:\\a.txt 
   相對路徑:相對路徑就是資源文件相對當前程序所在的路徑。
 
 
 
 
 IO流 : 做用 :用於設備和設備之間的數據傳輸。
  File類的使用 :操做問價的屬性
  
  IO流:用來操做文件的數據。
  
  IO流的分類:
     流按照操做數據的類型分爲兩種: 字節流  ,字符流
     
     字節流 : 讀取的是文件的二進制數據,不會對二進制作處理。不會解析成比看得懂的數據。
     字符流 :讀取的也是二進制數據,他會將二進制數據轉化爲咱們能過識別的字符(解碼)。  字符流是以字符單位的。
                   字符流 = 字節流 + 解碼。
         
   流按照流的方向: 輸入流和輸出流。
   判斷流是輸出仍是輸入: 以當期的應用程序爲參考 ,觀察數據是流入仍是流出,若是是流入就輸入流 ,若是是流出就是輸出流。
   
 
 //====================字節流========================
 
 1.字節輸入流:
 
     InputStream :此抽象類是表示字節輸入流的全部類的超類 ,抽象的類
     如何判斷一個流值字節輸入流 :
           判斷一下他的類名是否以InputStream結尾。
    
   使用 FileInputStream: 是InputStream的子類
   
   FileInputStream使用步驟:
      1.找到目標文件
      2.創建通道
      3.建立一個緩衝區
      4.讀取數據
      5.關閉資源
 
public class Demo1 {
 
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//         getFile();
// getFile2();
// getFile3();
getFile4();
}
 
//方式四:經過建立緩衝區和循環的方式來讀取
public static void getFile4() throws IOException{
 
  //1.找目標文件
  File file = new File("D:\\java課件及資料\\第十九次課\\代碼\\Day19\\src\\com\\beiwo\\homework\\HomeWork.java");
  //2.創建通道
  FileInputStream fileInputStream = new FileInputStream(file);
  //3.建立一個緩衝區
  byte[] b = new byte[1024]; // 通常寫1024倍數
  //4.讀取數據
  int count = 0;
  while((count = fileInputStream.read(b))!=-1){
  
  System.out.println(new String(b,0,count));
  }
  //5.關閉資源
  fileInputStream.close();
}
 
 
//方式三:建立緩衝區來讀取數據     缺陷不可以讀取一個完整的文件
public static void getFile3() throws IOException{
//1.找目標文件
File file = new File("D:\\a.txt");
//2.創建通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.建立一個緩衝區
byte[] b = new byte[1024];
//4.讀數據
//緩衝區來讀數據 : 數據存在哪裏  
//數據是存在緩存區字節數組中的
//返回值就是文件的大小。
int count = fileInputStream.read(b);
System.out.println(count);
//String裏面幫咱們作了解碼功能
System.out.println(new String(b, 0, count));
 
//5.關閉資源
fileInputStream.close();
 
}
 
 
//方法二:用循環來讀取字節數 缺點讀取的效率不高
public static void getFile2() throws IOException{
 
//1.找目標文件
File file = new File("D:\\a.txt");
//2.創建通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.讀數據
/*for(int i = 0;i<file.length();i++ ){//有多少個字節就去多少次
char c = (char)fileInputStream.read();
System.out.print(c);
}*/
 
int c 0;
//經過while循環調用read()的方法 ,若是返回的值以-1表示文件沒有內容了。
while((c fileInputStream.read())!= -1){
 
System.out.print((char)content);
}
 
//4.關閉資源
fileInputStream.close();
}
 
 
//方法一:每次只讀取一個字節
public static void getFile() throws IOException{
 
//1.找到目標文件
File file = new File("D:\\a.txt");
//2.創建通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.讀取文件中的數據
//read() 只獲取一個字節
int data = fileInputStream.read(); //a 第一個字節  
int data2 = fileInputStream.read();
System.out.println("獲取的數據:"+data2);
//4.關閉資源(釋放資源)
fileInputStream.close();
}
 
}
 
 
 
 
 
 
 
 
package com.beiwo.InputStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

 

2.字節輸出流 :
       OutPutStream : 他也是全部字節輸出流的超類 ,也是一個抽象的類 ,使用子類
            -----FileOutputStream   文件輸出流
            
      
      FileOutputStream 的使用步驟:
            1.找到目標文件
            2.創建通道
            3.寫入數據
            4.關閉資源
            
  FileOutputStream的使用注意事項:
          1.使用FileOutputStream寫數據的時候,若是目標文件不存在,那麼就會本身建立一個目標文件對象。
          2.使用FileOutputStream寫數據的時候,若是目標文件存在,先將裏面的數據清空,在寫入數據。
          3.使用FileOutputStream寫數據的時候,若是目標文件存在,想將數據在原有的基礎上追加,這個
                             時候就應該使用FileOutputStream(File file, boolean append) 構造方法,  append若是爲true表示
                             能夠追加數據,反之不信。
          4..使用FileOutputStream寫數據的時候,用write(int a)方法寫數據,雖然接收的是int ,但實際上只有一個字節的數據,
                            操做的是低八位的二進制 ,其餘的24位所有丟掉。
                            
 
                            
 練習題: 將一張圖片拷貝到另一個地方。
 
 字節輸出流代碼: public class Demo2 {     /**      * @param args      * @throws IOException      */     public static void main(String[] args) throws IOException {         // TODO Auto-generated method stub       writeData();                  //writeData2();              FileInputStream inp = new FileInputStream(new File("D:\\a.txt"));       byte[] b = new byte[1024];       inp.read(b);       System.out.println(Arrays.toString(b));            }          //方式二:     public static void writeData2() throws IOException{         //1.找目標文件         File file = new File("D:\\a.txt");             //2.建立一個通道         FileOutputStream outputStream = new FileOutputStream(file,true);  // 在這一步建立的文件。         //3.創鍵一個字節數組         String str = "hello word";         //將字符串變爲字節數組         byte[] b = str.getBytes();                  //4.寫入數據         outputStream.write(b);                  //5.關閉資源         outputStream.close();                       }          //方式一     public static void writeData() throws IOException{         //1.找目標文件         File file = new File("D:\\a.txt");                  //2.建立一個通道         FileOutputStream outputStream = new FileOutputStream(file);                  //3.開始寫入數據         /*int a = 10; // 4個字節           outputStream.write(a); //每次輸出一個字節         outputStream.write('b');         outputStream.write('c');*/                  // 0000-0000 0000-0000 0000-0001 1111-1111  ==  511         int a = 127;         outputStream.write(a); // 255         //4.關閉資源         outputStream.close();     } }
相關文章
相關標籤/搜索