流(Stream)、文件(File)和IO

讀取控制檯輸入

Java 的控制檯輸入由 System.in 完成。java

爲了得到一個綁定到控制檯的字符流,你能夠把 System.in 包裝在一個 BufferedReader 對象中來建立一個字符流。ide

下面是建立 BufferedReader 的基本語法:測試

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

BufferedReader 對象建立後,咱們即可以使用 read() 方法從控制檯讀取一個字符,或者用 readLine() 方法讀取一個字符串。 ui


從控制檯讀取多字符輸入

從 BufferedReader 對象讀取一個字符要使用 read() 方法,它的語法以下: spa

int read( ) throws IOException

每次調用 read() 方法,它從輸入流讀取一個字符並把該字符做爲整數值返回。 當流結束的時候返回 -1。該方法拋出 IOException。code

import java.io.*;

public class BRRead {
  public static void main(String args[]) throws IOException
  {
    char c;
    // 使用 System.in 建立 BufferedReader
    BufferedReader br = new BufferedReader(new
                       InputStreamReader(System.in));
    System.out.println("輸入字符, 按下 'q' 鍵退出。");
    // 讀取字符
    do {
       c = (char) br.read();
       System.out.println(c);
    } while(c != 'q');
  }
}
對象

從控制檯讀取字符串

從標準輸入讀取一個字符串須要使用 BufferedReader 的 readLine() 方法。繼承

它的通常格式是:ci

String readLine( ) throws IOException
import java.io.*;
public class BRReadLines {
  public static void main(String args[]) throws IOException
  {
    // 使用 System.in 建立 BufferedReader
    BufferedReader br = new BufferedReader(new
                            InputStreamReader(System.in));
    String str;
    System.out.println("Enter lines of text.");
    System.out.println("Enter 'end' to quit.");
    do {
       str = br.readLine();
       System.out.println(str);
    } while(!str.equals("end"));
  }
}

控制檯輸出

在此前已經介紹過,控制檯的輸出由 print( ) 和 println() 完成。這些方法都由類 PrintStream 定義,System.out 是該類對象的一個引用。字符串

PrintStream 繼承了 OutputStream類,而且實現了方法 write()。這樣,write() 也能夠用來往控制檯寫操做。

PrintStream 定義 write() 的最簡單格式以下所示:

void write(int byteval)

該方法將 byteval 的低八位字節寫到流中

import java.io.*;

// 演示 System.out.write().
public class WriteDemo {
   public static void main(String args[]) {
      int b;
      b = 'A';
      System.out.write(b);
      System.out.write('\n');
   }
}

FileInputStream

該流用於從文件讀取數據,它的對象能夠用關鍵字 new 來建立。

有多種構造方法可用來建立對象。

可使用字符串類型的文件名來建立一個輸入流對象來讀取文件:

InputStream f = new FileInputStream("C:/java/hello");

也可使用一個文件對象來建立一個輸入流對象來讀取文件。咱們首先得使用 File() 方法來建立一個文件對象:

File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);

FileOutputStream

該類用來建立一個文件並向文件中寫數據。

若是該流在打開文件進行輸出前,目標文件不存在,那麼該流會建立該文件。

有兩個構造方法能夠用來建立 FileOutputStream 對象。

使用字符串類型的文件名來建立一個輸出流對象:

OutputStream f = new FileOutputStream("C:/java/hello")

也可使用一個文件對象來建立一個輸出流來寫文件。咱們首先得使用File()方法來建立一個文件對象:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
 

Java中的目錄

建立目錄:

File類中有兩個方法能夠用來建立文件夾:

  • mkdir( )方法建立一個文件夾,成功則返回true,失敗則返回false。失敗代表File對象指定的路徑已經存在,或者因爲整個路徑還不存在,該文件夾不能被建立。
  • mkdirs()方法建立一個文件夾和它的全部父文件

import java.io.File;

public class CreateDir {
  public static void main(String args[]) {
    String dirname = "/tmp/user/java/bin";
    File d = new File(dirname);
    // 如今建立目錄
    d.mkdirs();
  }
}

讀取目錄

一個目錄其實就是一個 File 對象,它包含其餘文件和文件夾。

若是建立一個 File 對象而且它是一個目錄,那麼調用 isDirectory() 方法會返回 true。

能夠經過調用該對象上的 list() 方法,來提取它包含的文件和文件夾的列表。

下面展現的例子說明如何使用 list() 方法來檢查一個文件夾中包含的內容:

import java.io.File;

public class DirList {
  public static void main(String args[]) {
    String dirname = "/tmp";
    File f1 = new File(dirname);
    if (f1.isDirectory()) {
      System.out.println( "目錄 " + dirname);
      String s[] = f1.list();
      for (int i=0; i < s.length; i++) {
        File f = new File(dirname + "/" + s[i]);
        if (f.isDirectory()) {
          System.out.println(s[i] + " 是一個目錄");
        } else {
          System.out.println(s[i] + " 是一個文件");
        }
      }
    } else {
      System.out.println(dirname + " 不是一個目錄");
    }
  }
}

刪除目錄或文件

刪除文件可使用 java.io.File.delete() 方法。

如下代碼會刪除目錄 /tmp/java/,須要注意的是當刪除某一目錄時,必須保證該目錄下沒有其餘文件才能正確刪除,不然將刪除失敗。

import java.io.File;

public class DeleteFileDemo {
  public static void main(String args[]) {
      // 這裏修改成本身的測試目錄
    File folder = new File("/tmp/java/");
    deleteFolder(folder);
  }

  //刪除文件及目錄
  public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
        if(files!=null) {
            for(File f: files) {
                if(f.isDirectory()) {
                    deleteFolder(f);
                } else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }
}

相關文章
相關標籤/搜索