2011-01-27 4 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, нет оператора возврата. Это твоя проблема. Поскольку ваш метод объявляет, что он возвращает строку, каждый путь потока управления должен возвращать значение.

+2

Я бы добавил, что использование цикла while в качестве 'goto' должно также приводить к ошибке компиляции. В идеальном мире. –

+0

@ Никита Не шучу ... Я слышал, что это шепот ... Я мама, я мама (давайте проигнорируем, ради этой шутки, что у lisp нет компилятора ...) –

+0

Забавная идея. Я не думаю, что это намеренно. – maaartinus

0

В случае break, выполненных на самой первой итерации, ничего не возвращается. Это то, что компилятор пытается вам рассказать.

Есть некоторые другие довольно серьезные проблемы:

  • return e.getMessage() просто нет смысла
  • b.encode(buf) не так в случае, если менее buf.length байт читается