1. 程式人生 > >java檔案io和二進位制io

java檔案io和二進位制io

這學期開的演算法課,要用到檔案io操作,索性看了一下,下面就我的理解來介紹一下。

因為有關檔案,有必要說一下絕對檔名(absolute file name)和相對檔名 。

絕對檔名是由檔名和其完整路徑以及驅動器字母組成。例如:c:\book\Welcome.java

而Welcome.java則是一個相對檔名 相對於當前工作目錄。

下面介紹一下java的File類

File類位於java.io.File

具體方法太多見 FIle類的api連結

介紹幾個簡單的方法

+File(pathname:String) 為指定的路徑建立一個File物件。路徑名可以是一個目錄或者是一個檔案。

+File(parent:String,child:String)在目錄為parent的建立一個子路徑的File物件。

。。。

。。。

。。。

下面介紹檔案的輸入輸出

1.用Scanner來讀資料 Scanner類的api

首先要建立一個Scanner物件

+Scanner(source:File)根據一個File物件來建立一個Scanner物件

+Scanner(source:String)直接根據檔名來建立一個Scanner物件

。。。

。。。

+close() 關閉Scanner

+next() String  讀取下一個標記並作為字串返回(標記之間預設用空格分開)

+nextLine()    .....

+nextByte() ......

。。。

。。。

。。。

見api

2.使用PrintWriter寫資料PrintWriter類的api

 

+PrintWriter(source:File)根據一個File物件來建立一個PrintWriter物件

+PrintWriter(source:String)直接根據檔名來建立一個PrintWriter物件

。。。

。。。

print(c:char) 

print(s:String)

和格式化輸出一樣  有疑問的見api

還有一個close()方法

在使用過後一個不要檔案呼叫close方法 不然的話可能不能正常的讀寫

下面以書上的一道題為例

input.txt 中有一個數字 統計從1到這個給定頁數中出現0,1,2,3........9的個數

import java.io.File;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Scanner;

public class problem1 {
    public static void main(String [] args) throws IOException{
        File inputfile = new File("input.txt");
        File outputfile = new File("output.txt");
        Scanner input = new Scanner(inputfile);
        PrintWriter output = new PrintWriter(outputfile);
        int sum = input.nextInt();                   //頁數
        int [] num = new int [10];                   //用來儲存0-9出現的次數

        for(int i=1;i<=sum;i++){
            String s = String.valueOf(i);            //i轉化為字串
            for(int j=0;j<s.length();j++){           //遍歷字串
                char chr = s.charAt(j);
                switch (chr){
                    case '0' : num[0]++;break;
                    case '1' : num[1]++;break;
                    case '2' : num[2]++;break;
                    case '3' : num[3]++;break;
                    case '4' : num[4]++;break;
                    case '5' : num[5]++;break;
                    case '6' : num[6]++;break;
                    case '7' : num[7]++;break;
                    case '8' : num[8]++;break;
                    case '9' : num[9]++;break;

                }

            }
        }
        for(int i=0;i<=9;i++){
            output.println(num[i]);
        }
        input.close();
        output.close();
    }
}

 

二進位制io的話靜待下回分解。。。告辭