2013年9月4日 星期三

[Java]read file(讀取檔案) & ArrayList(動態陣列) & String型態的轉換

為什麼標題會這樣下呢,
因為最近再寫程式的時候常會做到這些流程
我的目的是要分析很多筆的資料
1.從txt檔讀取資料進來
2.因為不知道資料量的大小多少,會用一個動態的陣列儲存
3.動態陣列存的資料是String型態,必須轉為int,double,float,long型態的資料對我來說才有用
因為程式設計師經常需要用到數據來分析一些問題
綜合以上三點,才會需要使用到這些工具

待會兒會一一介紹
我使用的語言是Java
操作環境是安裝eclipse,很推這個編輯程式工具
強大又人性化,除了基本的關鍵字會標顏色之外,
如果Complie有錯誤,還會跟你說需要加上甚麼東西,會給你提示!!
所以可以省掉很多的麻煩,

台灣大學的eclispe教學連結
Get the Start ADK連結 -->下載這個除了可以在eclipse環境下寫java,也可以開發android程式


<demo範例>
我讀取的檔案名稱"test.txt"
檔案內容如下




1.1234 2.2345 3.3456
4.4567 5.5678 6.6789
7.7890 8.8901 9.9012

我的程式碼如下

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;


public class blog {
//"blog"是我們宣告的檔名
    public static void main(String[] args) throws IOException
    {
        FileReader fr = new FileReader("test.txt"); 
        BufferedReader br = new BufferedReader(fr);
        String line,tempstring;
        String[] tempArray= new String[3];
        ArrayList myList = new ArrayList();
        int i=0;
        while((line = br.readLine())!=null)
        {
           //br.readLine()是指讀取txt檔的每一行資料,把讀到的資料存到line
           //再將line丟給tempstring去儲存
             tempstring = line; 
             
          //因為我這個test檔的資料格式是-->一行有3個字串,用兩個空白鍵隔開,
          //tempstring.split("\\s") 會依照空白鍵來切割,剛好切三個,所以這邊我的tempArray的大小才會宣告3
             tempArray = tempstring.split("\\s");
             
             //這邊就是按照順序,一行一行的儲存到動態陣列裡面
              for(i=0;i< tempArray.length;i++)
              {          
                  myList.add(tempArray[i]);
              }
        }
        //到上半步為止,已經成功完成前兩步驟了
  
       //這邊的除3,和矩陣的需告大小,其實就是上面講的 "tempArray.length"這個值來做決定的
       //y小於3,也是從"tempArray.length"的概念來的
        int k = myList.size()/3;
        int count=0;
        double[][] trans_array = new double[k][3];
        
        for(int x=0;x<myList.size()/3;x++)
        {
            for(int y=0;y<3;y++)
            {
                trans_array[x][y]=Double.parseDouble((String) myList.get(count));
                count++; //一個index來決定myList讀取值的位置
            }
        }
        //這邊我用的發法是二維陣列來存取的,也可以用一維陣列存取
        //到這邊為止,我們已經成功的將文字檔的資料存放到一個Double二維陣列上了
        
    }
}

所以我們就可以隨心所欲使用資料
轉換後的陣列存的值對應的為:


trans_array[0][0]=1.1234
trans_array[0][1]=2.2345
trans_array[0][2]=3.3456
trans_array[1][0]=4.4567
trans_array[1][1]=5.5678
trans_array[1][2]=6.6789
trans_array[2][0]=7.7890
trans_array[2][1]=8.8901
trans_array[2][2]=9.9012


<延伸閱讀>
因為1,2,3點的程式說明其他大大們已經有很好的文章了
就不再多寫贅述,下面附上我參考資料的連結
(1)
讀取與寫入
Java學習筆記(二)
(2)
ArrayList的用法,與Array的差別
Java入門指南-arraylist
ArrayList(Andriod Develop)
(3)
String與基本資料型態的轉換

Related Articles

0 意見:

張貼留言

技術提供:Blogger.