java I/O之常用操作

---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------

IO流用來處理設備之間的數據傳輸
Java對數據的操作是通過流的方式
Java用於操作流的對象都在IO包中

File類在整個IO包中與文件本身有關的操作類,所有的與文件本身有關指的是創建、刪除文件等操作。在java.io包中的File類本身是一個跨平臺的文件操作類,所以在操作中要更多的考慮到各個操作系統的區別。

File 即指文件也指文件夾。

File類構造方法和字段摘要 

static String pathSeparator  路徑分隔符,window下是";"。 

static char pathSeparatorChar   路徑分隔符,window下是";"。 

static String separator  路徑分隔符,window下是"\"。 

static char separatorChar  路徑分隔符,window下是"\"

File(File parent, String child) 根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。 

File(String pathname)  通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新 File 實例。 

File(String parent, String child) 根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。 

File(URI uri)  通過將給定的 file: /URI 轉換爲一個抽象路徑名來創建一個新的 File 實例。 

File的相關方法

String getName():返回文件名或路徑名(若是路徑,返回最後一級子路徑名)

String getPath():返回對象對應的路徑名

File  getAbsoluteFile():返回絕對路徑

String getAbsolutePath():返回對象對應的絕對路徑

String getParent():返回文件目錄的上一級目錄名

boolean renameTo(File newName):重命名此File對象對應的文件或目錄,若重命名成功返回true;

boolean exists():判斷對象對應的文件或目錄是否存在;

boolean canWrite():判斷對象對應文件或目錄是否可寫;

boolean canRead():判斷對象對應文件或目錄是否可讀;

boolean isFile():判斷對象是文件,不是目錄;

boolean isDirectory()  判斷對象的文件是否是一個目錄; 

boolean isAbsolute() 判斷對象對應文件或目錄是否爲絕對路徑名; 

 

boolean createNewFile() 當且僅當不存在,該方法創建一個該File對象所指定的新文件,創建成功返回true。 

boolean delete():刪除File對象所對應的文件或路徑;

boolean mkdir() 創建File對象所對應的目錄,調用該方法的File對象必須對應路徑,而不是文件。

String[] list():列出File對象的所有子文件名和路徑名。

File[] listFiles():列出File對象的所有子文件和路徑。

static File[] listRoots():列出系統所有的根路徑;

import java.io.File;

import java.io.IOException;

public class Demo1 {

public static void main(String[] args) throws IOException {

File f = new File("E:/你好.txt");

System.out.println(f.createNewFile());

System.out.println(f.getName());

System.out.println(f.getParent());

System.out.println(f.length());

}

}

轉換流:

InputSteamReader :字節到字符的橋樑。解碼

OutputStreamWriter :字符到字節的橋樑。編碼

流的操作規律:

之所以要弄清楚這個規律,是因爲流對象太多。開發時不知道用哪個對象合適。

想知道開發用到哪些對象,就只有通過四個明確即可。

1,明確源和目的(匯)

  源: InputStream Reader

   目的: OutputStream Writer

2,明確數據是否是純文本數據。

   源:是 純文本:Reader

       否 InputStream 

   目的:是純文本 Writer

         否: OutPutStream

   到這裏,就可以明確需求中具體要使用哪個體系了。

3,明確具體的設備。

   源設備

        硬盤: File

        鍵盤:System.in

        內存: 數組

        網絡:Socket流

   目的設備:

       硬盤: File

        鍵盤:System.out

        內存: 數組

        網絡:Socket流

 4 是否需要其他額外功能

   1 是否需要高效(緩衝區)

     是,就加上Buffer   

轉換流

InputSteamReader :字節到字符的橋樑。解碼

OutputStreamWriter :字符到字節的橋樑。編碼

需求1 複製一個文本文件

1,明確源和目的(匯)

  源: InputStream Reader

   目的: OutputStream Writer

2 是否是純文本?

  是!

  源:Reader

  目的:Writer

3 明確具體設備:

  源:硬盤 File

  目的:硬盤 File

FileReader fr=new  FileReader("a.txt");

FileWriter fw=new  FileWriter("b.txt");

4 需要額外功能嗎?

  BufferReader bufr=new BufferReader(new FileReader(“a.txt"));

  BufferWriter bufw=new  BufferWriter (new FileWriter("b.txt"));

需2:讀取鍵錄入信息,並寫入到一個文件中。

1,明確源和目的(匯)

  源: InputStream Reader

   目的: OutputStream Writer

2 是否是純文本?

  是!

  

  源:Reader

  目的:Writer

3 明確設備

   源: 鍵盤 System.in

   目的:硬盤 File

InputStrea in=System.in

FileWriter fw=new FileWriter("b.txt");

這樣做可以完成,但是麻煩。將讀取的字節數據轉換成字符串。再由字符流操作。

4 需要額外功能嗎?

  需要:轉換 。將字節流轉成字符流。因爲明確的源是Reader,這樣操作文本數據就便捷

  所以要將已有的字節流轉成字符流,使用字節--》字符。InputStreamReader

  InputStreamReader isr=new InputStreamReader(System.in);

  FileWriter fw=new FileWriter("b.txt");

還需要功能嗎

需要:想高效 

  BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in))

    BufferedWriter bufw=new BufferedWriter(new FileWriter("b.txt")) ;

需求3 講一個文本文件數據顯示在控制檯上。

   1,明確源和目的(匯)

       源: InputStream Reader

       目的: OutputStream Writer

  2 是否是純文本?

       是!

       源:Reader

        目的:Writer

   3 明確設備

      源: 硬盤 File

       目的:控制檯:System.out

   FileReader fr=new FileReader("a.txt");

   OutputStream out =new System.out //PrintStream

4 需要額外功能麼?

需要:轉換。

    FileReader fr=new FileReader("a.txt");

    OutputStreamWriter osw=new OuputStreamWriter(System.out);

需要高效。

   BufferedReader bufr=new BufferedReader(FileReader("a.txt"));

   BufferedReader bufw=new BufferReader(new OuputStreamWriter(System.out));

4 需求 讀取鍵盤錄入數據,顯示在控制檯上。

  1,明確源和目的(匯)

       源: InputStream Reader

       目的: OutputStream Writer

   2 是否是純文本?

       是!

       源:Reader

        目的:Writer

    3 明確設備

      源: 鍵盤 System.in

       目的:控制檯:System.out

   InputStream in=Syste.in

   OutputStream out=System.out;

4 明確額外功能?

  需要轉化,因爲都是字節流,但是操作的卻是文本數據。

  所以使用字符流操作起來更爲便捷

 InputStreamReader isr=new InputStreamReader(System.in);

 OutputReaderWriter osw=new  OutputReaderWriter (System.out);

爲了將其高效。

 BufferedReader bufr=new  BufferedReader(new InputStreamReader(System.in));

 BufferedWriter bufw=new BufferedWriter(new OutputReaderWriter (System.out));

例如:

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class CopyMp3Test {

/**

 * @param args

 * @throws IOException 

 */

public static void main(String[] args) throws IOException {

copy_4();

}

//千萬不要用,效率沒有!

public static void copy_4() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\4.mp3");

int ch = 0;

while((ch =fis.read())!=-1){

fos.write(ch);

}

fos.close();

fis.close();

}

//不建議。 

public static void copy_3() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\3.mp3");

byte[] buf = new byte[fis.available()];

fis.read(buf);

fos.write(buf);

fos.close();

fis.close();

}

public static void copy_2() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

BufferedInputStream bufis = new BufferedInputStream(fis);

FileOutputStream fos = new FileOutputStream("c:\\2.mp3");

BufferedOutputStream bufos = new BufferedOutputStream(fos);

int ch = 0;

while((ch=bufis.read())!=-1){

bufos.write(ch);

}

bufos.close();

bufis.close();

}

public static void copy_1() throws IOException {

FileInputStream fis = new FileInputStream("c:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\1.mp3");

byte[] buf = new byte[1024];

int len = 0;

while((len=fis.read(buf))!=-1){

fos.write(buf,0,len);

}

fos.close();

fis.close();

}

}

 

我的總結:一些經常用到的方法一定要熟悉,並熟記。I/Ojava的一大塊重要知識!

---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章