2011-07-06 44 views
1

私はこのコードをSun Javaサイトから実行しようとしています(私はそれをコピーしていませんでした、それを見て、コードを思い出すのに役立ちます)。プログラムをコンパイルしようとしたときにエラーが発生しました

import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class CharEx{ 
    FileReader inputStream = null; 
     FileWriter outputStream = null; 

    public static void main(String args[]) throws IOException{ 
     FileReader inputStream = null; 
     FileWriter outputStream = null; 

     try{ 
      inputStream = FileReader("xanadu.txt"); 
      outputStream = FileWriter("out.txt"); 
      int c; 
      while ((c = inputStream.read()) != -1){ 
       outputStream(c); 
      } 
     } 
     finally{ 
      if(inputStream !=null){ 
       inputStream.close(); 
      } 
      if(outputStream !=null){ 
       outputStream.close(); 
      } 

     } 
    } 
} 

しかし、私はフォローイングエラーが発生しています。 ((

誰かが私が間違って取得していますどこに私を助けることができる

:?私はそれが java.io.*の内側にそれを見なければならないのに対し、システムが java.lang内部 FileReaderを探していると思うのメッセージから

D:\Java>javac CharEx.java 
CharEx.java:14: cannot find symbol 
symbol : method FileReader(java.lang.String) 
location: class CharEx 
         inputStream = FileReader("xanadu.txt"); 
            ^
CharEx.java:15: cannot find symbol 
symbol : method FileWriter(java.lang.String) 
location: class CharEx 
         outputStream = FileWriter("out.txt"); 
            ^
CharEx.java:18: cannot find symbol 
symbol : method outputStream(int) 
location: class CharEx 
           outputStream(c); 
           ^
3 errors 

PS:私は、JDK 1.5によ

+2

私はあなたがIDEを使用してみることをお勧めします。正しいコードを書いてより速いフィードバックを得るのに役立ちます。 –

+4

@ピーター:合意。しかし、手作業でコンパイルして実行することについては、多くのことが言われています。 –

+0

トピックを部分的にオフにする: 'Reader'が' Stream'で終わる変数を呼び出すことを避けるでしょう。 'Reader' /' Writer'はテキストを扱うためのもので、 'InputStream' /' OutputStream'はバイナリデータを扱うものです。両方のグループは一般的な意味で「ストリーム」と考えることができますが、このように用語を混ぜると混乱することがあります。私は変数をそれぞれ "読者"と "ライター"と呼んでいます。 –

答えて

8

あなたは(つまり、これらの型のオブジェクトを作成する)FileReaderFileWriterをインスタンス化しようとしている

012。

あなたはnewキーワードを使用する必要があることを行うには:コードは、メソッド呼び出しのように見えるので、コンパイラはFileReader(およびFileWriter)という名前のメソッドを探しnewを除外することにより

inputStream = new FileReader("xanadu.txt"); 
outputStream = new FileWriter("out.txt"); 

をし、doesnの」それを見つけてください、それはあなたにちょっと変わった、しかし驚くほど明確な言葉であなたに教えてくれます。

ヒント:「シンボル」は、コンパイラが「名前」と呼ぶものです。その名前は、クラス、メソッド、変数のいずれでもかまいません。 "symbol:"行をチェックすると、正確な問題が見つかります。これは、コンパイラがStringパラメータを取りFileReader呼ば方法を探していることを示しています:

 
CharEx.java:14: cannot find symbol 
symbol : method FileReader(java.lang.String) 
+3

18行目にoutputStream.write(c)も必要です。 – bstick12

+0

Joachim&Bstickありがとうございました。私はコードを修正した。ヨアヒム、それはあなたの時間のために非常に洞察力のある答えのおかげです。 :) –

3

リーダライタを初期化するときあなたはnewキーワードが欠落しています。

inputStream = new FileReader("xanadu.txt"); 
outputStream = new FileWriter("out.txt"); 
ます。また、このライン上で何かが欠けている

outputStream(c); 

はあなたがそこに出力ストリームに書いてみませんか?次に、これを試してください:

outputStream.write(c); 
+0

あなたの時間のために多くのおかげで:)私はエラーを修正:) –

関連する問題