2011-01-27 30 views
-1
package com.cordys.report; 

import java.io.FileInputStream; 

import org.apache.commons.codec.binary.Base64; 

public class Encode { 
    // file path ex : C:\Program Files\Cordys\Web\reports\I0001180.pdf 
    public static String encodeFileStream(String filePath) { 
     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; 
       } 

       // new Base64().encode(byte); 
       // sb.append(Base64.encode(buf)); 
       // sb.append(Base64.encodeBase64(buf)); 

       Base64 b = new Base64(); 
       sb.append(b.encode(buf)); 
       return sb.toString(); 
      } 
     } 
     catch (Exception e) { 
      return e.getMessage(); 
     } 
    } 
} 
+0

あなたの質問は何を読んでもらうという場合には間違っていないのですか? – Satya

+0

コードをフォーマットしてください – Elalfer

+0

ようこそstackoverflow.com書式設定オプションの「コード」アイコンを使用して、コードをきちんと整形してください。 – jetru

答えて

2

whileループを "中断"した場合、return文はありません。それがあなたの問題です。メソッドは文字列を返すと宣言しているため、すべてのコントロールフローパスは値を返す必要があります。

+2

'while'ループを' goto'として使うと、コンパイルエラーも発生するはずです。理想的な世界で。 –

+0

@Nikita冗談はありません...私はlispがそれをすることができると聞きます....私は子供、私は子供(その冗談のために、そのリスプはコンパイラを持っていません...無視しましょう) –

+0

面白いアイデア。私はそれが意図的だとは思わない。 – maaartinus

0

最初の反復でbreakが実行された場合、何も返されません。これはコンパイラがあなたに伝えようとしていることです。

他のいくつかのかなり深刻な問題があります。

  • return e.getMessage()だけでは意味
  • b.encode(buf)未満buf.lengthバイト
関連する問題