2013-10-19 29 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 

私は私も他のいくつかのミスを犯したので、私にあなたができる任意の助言を与えること自由に感じてきたと確信しています。あなたは以下の

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

を変更するようにする必要があり

答えて

8

Charsetは抽象クラスであるため、という新しいキーワードでインスタンス化することはできません。

のJava 1.7を使用してJavaでStandardCharsets.US_ASCII

+1

+1定義済みの定数を使用しています(文字列パラメータを使用しているために '何とかあなたの'を逃しました ')ので、私は尋ねました。 ) – A4L

3

Files.readAllLines(Path, Charset)のドキュメントを参照してください。

+1

を使用する必要がありますので、彼は:-)また、私として.toPathを使用する必要はありませんので、実際に彼の「ファイル」変数の型がパスであるpublicコンストラクタを持っていません。他のコメントforName(String)に記載されているものは、標準の文字セットのJava7ではお勧めできません。 –

+1

@MateuszDymczyk - ありがとう。私は何とかそれを見逃した。 D – SudoRahul

5

コンストラクタを文字セットを取得するには、newオペレータと呼ばれ、そのCharset("US-ASCII")は有効な文ではありませんされています。 さらに、Charsetのコンストラクタは保護されているため、static factoryメソッドを使用して作成する必要があります: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))で廃止されました。しかし、あらかじめ定義された定数がある場合は、それらを使用する必要があります。 **編集**はい、文字列パラメータのため、あなたは何かを渡すことができますが、メソッドはそれを処理するように見える** ** t out ;-) – A4L

+1

シンプルなタイプミスはCharset.forName( "US-ASCI"):-)明らかに問題は、JDK7 Google Guavaが同じ定数を持つ同様のクラスのCharsetsを持っていたからであった。 AhとforName()はまだ役に立たないので廃止されていません!名前が示すように、JDK7クラスは標準の文字セットのためにのみ使用されます:-)他にはforName()を使用する必要があります。 –

関連する問題