2011-01-24 3 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.) ** 예외 메시지를 반환하는 것은 excepton을 처리하는 것이 현저하게 나쁜 방법입니다. 호출자가 매우 짧은 파일과 오류 조건을 구별 할 수있는 방법은 없습니다. 3.) 당신이하고 싶은 것이 아닌'filePath' 인자를 무시합니다. –

답변

0

Base64 클래스를 가져 오지 않았습니다. 이 경우 commons-codec을 사용하는 것이 좋습니다. 추가 라이브러리를 추가하고 싶지 않으면 JDK는 사용할 수있는 내부 구현이 제공됩니다 (이식 할 수 없으므로 권장하지 않음).

+0

나는 requred jar 파일을 추가했지만 다음과 같이 여전히 오류가 발생합니다. 정적 컨텐츠에서 nonstatic 메소드 인 코드 (byte [])를 참조 할 수 없습니다. – monika

1

글쎄, 컴파일러는 Base64라는 클래스를 어디에서 찾을 수 있는지 알지 못합니다. (나는 변수 될 운명이 있다고 의심한다.) 단계 :

  • 당신은 그것을 가져 오지 않은, 그래서 컴파일러는 현재 java.lang의 및 com.cordys.report
  • 당신을보고있다 클래스가 classpath에 있는지도 확인해야합니다. 그래서 컴파일러가 찾을 수있는 것이 있습니다. Base64 클래스는 어디서 찾을 수 있습니까?

Apache Commons Codec 라이브러리를 사용하고 있습니까? 그렇다면 org.apache.commons.codec.binary.Base64에 대한 가져 오기가 필요하며 해당 jar 파일이 클래스 경로에 있는지 확인하십시오.

(측면의 문제로서, 당신은 또한 finally 블록에서 파일을 닫고해야합니다. 당신의 실제 코드가 실제로 오히려 관계없이 전체 버퍼를 인코딩하는 것보다, 읽은 얼마나 많은 바이트의 메모를 취 희망 예외 처리에 대한보다 견고한 접근 방식입니다.)

관련 문제