2013-06-17 4 views
1

POI 라이브러리를 통해 java로 .doc 파일을 읽으려고합니다. 여기 내 코드입니다 :Java POI - 오류 : 전체 헤더를 읽을 수 없습니다.

FileInputStream fis = new FileInputStream(file.getAbsolutePath()); 
HWPFDocument document = new HWPFDocument(fis); 
WordExtractor extractor = new WordExtractor(document); 
String [] fileData = extractor.getParagraphText(); 

그리고 나는이 예외가 :

java.io.IOException: Unable to read entire header; 162 bytes read; expected 512 bytes 
at org.apache.poi.poifs.storage.HeaderBlock.alertShortRead(HeaderBlock.java:226) 
at org.apache.poi.poifs.storage.HeaderBlock.readFirst512(HeaderBlock.java:207) 
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104) 
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138) 
at MicrosoftWordParser.getDocString(MicrosoftWordParser.java:277) 
at MicrosoftWordParser.main(MicrosoftWordParser.java:86) 

나의 파일이 손상되지, 내가 마이크로 소프트 워드와 함께 시작할 수 있습니다.

poi 3.9 (최신 안정 버전)를 사용하고 있습니다.

문제를 해결할 수있는 아이디어가 있습니까?

감사합니다.

답변

2

readFirst512()Inputstream의 처음 512 바이트를 읽고 읽을 바이트가 충분하지 않은 경우 예외를 throw합니다. 나는 당신의 파일이 POI에 의해 읽히기에 충분히 크지 않다고 생각합니다.

+0

감사합니다. 그러나 나는 무엇을해야만 하는가? –

0

아마도 올바른 Word 파일이 아닙니다. 실제로 길이는 162 바이트입니까? 파일 시스템을 체크인하십시오.

Word 나 LibreOffice를 사용하여 새 Word 파일을 만든 다음 프로그램을 사용하여 읽는 것이 좋습니다.

+0

내 파일 크기는 276 ko입니다. 단어로 시작할 수 있으므로 손상되지 않습니다. –

0

이 프로그램을 사용해보십시오. package file_opration;

import java.io.*; 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 

public class ReadDocFile { 
public static void main(String[] args) { 
File file = null; 
WordExtractor extractor = null ; 
try { 

    file = new File("filepath location"); 
    FileInputStream fis=new FileInputStream(file.getAbsolutePath()); 
    HWPFDocument document=new HWPFDocument(fis); 
    extractor = new WordExtractor(document); 
    String [] fileData = extractor.getParagraphText(); 
    for(int i=0;i<fileData.length;i++){ 
    if(fileData[i] != null) 
     System.out.println(fileData[i]); 
    } 
} 
catch(Exception exep){} 
    } 
} 
+0

같은 예외가 시작됩니다. –

0

아, 당신은 파일을 가지고, 당신은의 InputStream 뒤에 파일을 숨겨 메모리에 모든 것을 버퍼링 메모리의 부하를 지출하고 ...하지 마십시오! 파일이 있다면 POI에 알려주십시오. 그게 다야 경우에만 POI에게 InputStream를 제공하여이 같은

귀하의 코드가 있어야한다 뭔가 : 그것은 빨리하고 메모리를 적게 사용합니다

NPOIFSFileSystem fs = new NPOIFSFileSystem(new File("myfile.doc")); 
HWPFDocument document = new HWPFDocument(fs.getRoot()); 

한다는의 InputStream로를 읽기,이 경우 문제 이 파일은 일반적으로 약간의 도움이되는 오류 메시지를 출력해야합니다.

0

162 바이트 MS Word .doc는 아마도 "소유자 파일"입니다. Word에서 파일을 나타내는 데 사용하는 임시 파일이 잠겨 있거나 소유되어 있습니다.

파일 확장명은 .doc이지만 MS Word 문서는 아닙니다.

관련 문제