2013-07-12 11 views
7

Sto provando a leggere i file doc e docx. ecco il codice:Come leggere il documento doc e docx in java con POI api

static String distination="E:\\   
    static String docFileName="Requirements.docx"; 
public static void main(String[] args) throws FileNotFoundException, IOException { 
    // TODO code application logic here 
    ReadFile rf= new ReadFile(); 
    rf.ReadFileParagraph(distination+docFileName); 


    } 
    public void ReadFileParagraph(String path) throws FileNotFoundException, IOException 
    { 
     FileInputStream fis; 
     File file = new File(path); 
     fis=new FileInputStream(file.getAbsolutePath()); 
      String filename=file.getName(); 

     String fileExtension=fileExtension(path); 
     if(fileExtension.equals("doc")) 
     { 
      HWPFDocument document=new HWPFDocument(fis); 
      WordExtractor DocExtractor = new WordExtractor(document); 
      ReadDocFile(DocExtractor,filename); 

     } 
     else if(fileExtension.equals("docx")) 
     { 

      XWPFDocument documentX = new XWPFDocument(fis);    
      List<XWPFParagraph> pera =documentX.getParagraphs(); 
      ReadDocXFile(pera,filename); 
     } 
     else 
     { 
      System.out.println("format does not match"); 
     } 

    } 
    public void ReadDocFile(WordExtractor extractor,String filename) 
    { 

     for (String paragraph : extractor.getParagraphText()) { 
      System.out.println("Peragraph: "+paragraph); 
     } 
    } 
    public void ReadDocXFile(List<XWPFParagraph> extractor,String filename) 
    { 

     for (XWPFParagraph paragraph : extractor) { 
      System.out.println("Question: "+paragraph.getParagraphText()); 
     } 

    } 
    public String fileExtension(String filename) 
    { 

     String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length()); 
     return extension; 
    } 

questo codice danno un'eccezione quando voglio leggere un file docx:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException 
    at l3s.readfiles.db.ReadFile.ReadFileParagraph(ReadFile.java:52) 
    at autometictagdetection.TagDetection.main(TagDetection.java:36) 
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 2 more 
Java Result: 1 

Un altro problema è quando voglio leggere un file doc, è leggi alcuni file molto bene ma per alcuni file dà un'eccezione come quella

Exception in thread "main" org.apache.poi.hwpf.OldWordFileFormatException: The    document is too old - Word 95 or older. Try HWPFOldDocument instead? 
    at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:222) 
    at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:186) 
    at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:174) 
    at l3s.readfiles.db.ReadFile.ReadFileParagraph(ReadFile.java:44) 
    at autometictagdetection.TagDetection.main(TagDetection.java:36) 
Java Result: 1 

Ho visto che POI AP Supporto parola 6 e parola 95 in http://poi.apache.org/hwpf/index.html. Qualcuno può dare una soluzione a questi due problemi?

+0

La seconda praticamente ti dice ciò che è sbagliato. Non conosco l'API POI, ma è in grado di leggere solo documenti Word più recenti di Word 95 con HWPFDocument e dovresti utilizzare HWPFOldDOcument nel tuo codice. –

+0

Ci ho provato. Ma quando faccio questo documento HWPFOldDocument = new HWPFOldDocument (fis); dice "nessun costruttore adatto trovato per HWPFOldDocument". Inoltre non ho trovato alcun documento su HWPFOldDocument. – Khaled

+0

Il primo risultato è apparso quando ho cercato su google HWPFOldDocument: https://poi.apache.org/apidocs/org/apache/poi/hwpf/HWPFOldDocument.html –

risposta

0

Per il tuo primo numero, credo che sia necessario fare riferimento alle dipendenze nel progetto.

Vale a dire immagino: XMLBeans

POI-OOXML-schemi, che è in Poi-OOXML-schemas-versione-yyyymmdd.jar

(dal Apache POI page).

Here è la pagina XMLBeans di Apache.

Io non sono in grado di elencare ogni biblioteca si richiede, ma probabilmente si può capire attraverso Maven ...