2013-10-19 18 views
6

更新:感謝大家的快速響應。我已經解決了Charset問題,但現在發生了一些我根本不瞭解的情況。這裏是我的代碼:readAllLines Java中的字符集

import java.io.*; 
import java.nio.file.*; 
import java.nio.charset.*; 
public class readConvertSeq{ 
    private static String[] getFile(Path file){ 
     String[] fileArray = (String[])Files.readAllLines(file, StandardCharsets.US_ASCII).toArray(); 
     return fileArray; 
    } 
    public static void main(String[] args){ 
     String[] test = readConvertSeq.getFile(Paths.get(args[0])); 
     int i; 
     for(i = 0; i < test.length; i++){ 
      System.out.println(test[i]); 
     } 
    } 
} 

而這裏的錯誤:

readConvertSeq.java:6: error: unreported exception IOException; must be caught or declared to be thrown 
    String[] fileArray = (String[])Files.readAllLines(file, StandardCharsets.US_ASCII).toArray(); 

我只是想從一個文件中獲得字符串數組,而我通過Java的迂腐變得非常沮喪。這裏是我的代碼:

import java.io.*; 
import java.nio.file.*; 
import java.nio.charset.*; 
public class readConvertSeq{ 
    private static String[] getFile(Path file){ 
     String[] fileArray = Files.readAllLines(file, Charset("US-ASCII")).toArray(); 
     return fileArray; 
    } 
    public static void main(String[] args){ 
     String[] test = readConvertSeq.getFile(Paths.get(args[0])); 
     int i; 
     for(i = 0; i < test.length; i++){ 
      System.out.println(test[i]); 
     } 
    } 
} 

它給了我這樣的:

readConvertSeq.java:6: error: cannot find symbol 
    String[] fileArray = Files.readAllLines(file, Charset("US-ASCII")).toArray(); 
               ^
    symbol: method Charset(String) 
    location: class readConvertSeq 

我敢肯定,我已經取得了一些其他錯誤一樣,所以隨時給我什麼建議可以。

回答

8

字符集是一個抽象類,因此您不能使用新的關鍵字實例化它。

爲了得到一個字符集在Java中使用1.7 StandardCharsets.US_ASCII

+1

使用預定義常量+1(我以某種方式錯過了你的'(因爲它使用了一個String參數)'這就是爲什麼我問,我應該雖然我自己雖然) – A4L

3

你需要做下面的改變

String[] fileArray = (String[]) Files.readAllLines(file.toPath(), Charset.forName("US-ASCII")).toArray(); 
        ^^^^^ - Cast required      ^^^^ - Get Charset using forName    

Files.readAllLines(Path, Charset)的文檔。

+1

其實他的「文件」變量類型的路徑,所以他並不需要使用.toPath :-)也如我在其他評論中提到forName(String)在Java7中不推薦用於標準字符集。 –

+1

@MateuszDymczyk - 謝謝。我不知何故錯過了看到它。 'Path'對象的'file'名稱不可消化:D – SudoRahul

5

構造在Java中被稱爲與new運營商,所以Charset("US-ASCII")是不是一個有效的語句。 此外,Charset的構造函數受到保護,因此您必須使用靜態工廠方法來創建它:Charset.forName("US-ASCII")

2

Charset沒有一個公共的構造函數,所以你必須使用靜態工廠方法Charset#forName

+1

這可能很容易出錯(因爲它使用String參數),所以Oracle的人在Java7中添加了一個新類StandardCharsets,其中包含常用於這類事情的常見字符集的常量。 –

+1

@MateuszDymczyk你能給出一個錯誤情況嗎?它甚至在'jdk7'([javadoc](http://docs.oracle.com/javase/7/docs/api/index.html?java/util/Arrays.html))中都不推薦使用。但事實上,如果有一些預定義的常量可用,應該使用它們! **編輯**是的,因爲字符串參數,你可以傳遞任何東西,但該方法似乎處理的原則s ** t在s ** t出;-) – A4L

+1

一個簡單的錯字將做Charset.forName 「US-ASCI」):-)顯然這個問題是真實的,因爲即使在JDK7之前,Google Guava也有一個類似的Charsets類,它們的常量是相同的。啊和forName()不被棄用,因爲它仍然有用!正如名稱所述,JDK7類僅用於標準字符集:-)對於其他用戶,您仍然必須使用forName()。 –