2016-04-18 73 views
0

在測試類用於主的方法,所述參數被設置爲一個文件名(該文件包含整數數據)文件名作爲參數傳遞給主方法

這裏是代碼片段:

static Main main = new Main(); 
static 
{ 
    String[] args = {"../data/filename.txt"}; 
    main.main(args); 
} 

由於文件名作爲參數傳遞給主方法,因此文件名的類型爲String []。這個文件需要被解析(或者其他可能的方法)來獲取信息。爲此,我使用掃描儀逐行查看。

public static void main(String[] args) 
    { 
     List<Integer> left = new ArrayList(); 
     List<Integer> right = new ArrayList(); 

     try { 
      Files.lines(Paths.get("filename.txt")) 
       .map(l -> l.split("\\s")) 
       .forEachOrdered(l -> { 
        left.add(Integer.parseInt(l[0])); 
        right.add(Integer.parseInt(l[1])); 
       }); 
     } catch (NumberFormatException | IOException e) { 
      e.printStackTrace(); 
     } 

     int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray(); 
     int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray(); 
    } 

這裏的問題是,我已經硬編碼的文件名到Files.lines(Paths.get(「FILENAME.TXT」)),我不想要的。

由於文件名是作爲參數傳遞的,並且它的類型是String [],所以我不能使用args作爲文件掃描器的參數。我的問題是,我怎麼能從String []轉換爲String? OR有沒有更簡單的方法來解析信息? (請記住,文件名將作爲主參數)

回答

0

你問的如何索引args數組?只是這樣做:

Files.lines(args[0]) 

在一個側面說明,有一個在你的測試類實例化Main沒有意義的。只需要靜態調用該方法:

static 
{ 
    String[] args = {"../data/filename.txt"}; 
    Main.main(args); 
} 
0

您是否試圖僅從String [](array)中取出元素?

和參數在java中應該這樣:

參數數量[0] - 總是程序名稱 參數數量[1,2 ..] - 參數

因此,我認爲你應該改變先代碼:

static Main main = new Main(); 
static 
{ 
    String[] args = {"Main","../data/filename.txt"}; 
    main.main(args); 
} 

和第二碼

public static void main(String[] args) 
    { 
     List<Integer> left = new ArrayList(); 
     List<Integer> right = new ArrayList(); 

     try { 
      Files.lines(Paths.get(args[1])) 
       .map(l -> l.split("\\s")) 
       .forEachOrdered(l -> { 
        left.add(Integer.parseInt(l[0])); 
        right.add(Integer.parseInt(l[1])); 
       }); 
     } catch (NumberFormatException | IOException e) { 
      e.printStackTrace(); 
     } 

     int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray(); 
     int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray(); 
    } 

這是好的C因此當你採取「真實」的論點時,它不會停止工作。否則,它會採取程序名稱。

相關問題