2011-01-24 8 views
2
package com.cordys.report; 

import java.io.FileInputStream; 

public class Encode 
{ 


public static String encodeFileStream(String filePath) //file path ex : C:\Program Files\Cordys\Web\reports\I0001180.pdf 
{  


try 
{ 


    FileInputStream fin = new FileInputStream("E:/CSS Document/Test.pdf"); 
    StringBuffer sb=new StringBuffer(); 
    int lineLength = 72; 
    byte[] buf = new byte[lineLength/4*3]; 
    while (true) 
    { 
    int len = fin.read(buf); 
    if (len <= 0) 
    { 
     break; 
    } 
    sb.append(Base64.encode(buf)); 
    } 
    return sb.toString(); 
} 
catch(Exception e) 
{ 
    return e.getMessage(); 
} 

} 


} 
+0

1.なぜ別の行にエンコードしようとしていますか?塩の価値があるすべてのBase64エンコーダは、適切なサイズのチャンクをフィードせずに複数行の結果を生成できる必要があります。 2.)**例外メッセージを返すことは例外的に対処するには非常に悪い方法です。呼び出し元が非常に短いファイルからエラー状態を区別する方法はありません。 3.) 'filePath'引数を無視します。おそらくあなたがやりたいことではありません。 –

答えて

0

あなたはBase64クラスをインポートしていません。これにはcommons-codecを使用することをお勧めします。ライブラリを追加したくない場合、JDKには内部実装が付属しています(ポータブルではないので推奨しません)。

+0

私はrequred jarファイルを追加しましたが、次のようにエラーをスローします:非静的メソッドencode(byte [])は静的コンテンツから参照できません – monika

1

これは、コンパイラがBase64という名前のクラスの場所を知らないことを意味します。 (私は変数であることを意味していますことを疑う。)ステップ:

  • あなたはそれをインポートしていないので、コンパイラは現在だけのjava.langとcom.cordys.report
  • あなたに探していますクラスがクラスパス上にあることを確認する必要があります。そうすれば、コンパイラが見つけることができます。 Base64クラスはどこで見つかるはずですか?

Apache Commons Codecライブラリを使用しようとしていますか?その場合は、org.apache.commons.codec.binary.Base64のインポートが必要で、適切なjarファイルがクラスパスにあることを確認してください。

(側の問題として、私はあなたの本当コードを願って、むしろ関係なく、バッファ全体をコードするよりも、実際に読み込まれたバイト数のノートを取る。あなたはまた、finallyブロック内のファイルを閉じて、取るべき例外を処理するにはかなり堅牢なアプローチです)。

関連する問題