2016-02-08 2 views
0

Я пытаюсь получить мой файл odt в ByteArray для его отправки на мой сервер. Думаю, я нашел способ, как это сделать здесь: How can I generate Byte array from an ODT file java.ODT File to Byte Array Java

Но одна проблема У меня есть, как я могу использовать это в файле, который в настоящее время открыт в Writer, потому что я хочу, чтобы все это произошло, когда я нажимаю кнопку?

Пробовал это Адрес этого файла:

  //Abspeichern des Documents im Temp Ordner 
      String storeUrl = "file:///C:/Windows/Temp/Test.odt"; 
      XModel xDocModel = this.frame.getController().getModel(); 
      XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xDocModel); 
      XStorable xStorable = (XStorable) UnoRuntime.queryInterface(XStorable.class, xTextDocument); 
      PropertyValue[] storeProps = new PropertyValue[1]; 
      storeProps[0] = new PropertyValue(); 
      storeProps[0].Name = "Overwrite"; 
      storeProps[0].Value = new Boolean(true); 
      try { 
       xStorable.storeToURL(storeUrl, storeProps); 
      } catch (com.sun.star.io.IOException ex) { 
       Logger.getLogger(OptionPageDemo.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      //Konvertieren in byte[] 
      Path Test = Paths.get("C:/Windows/Temp/Test.odt"); 
      byte[] data = Files.readAllBytes(Test); 

Но это не похоже на работу.

Так может быть, вы можете сказать мне, как я могу Адрес Файл :)

ответ

0

Сохраните файл ODT на диск первым. Следующий код работает на моей машине:

import com.sun.star.frame.XStorable; 
import java.net.URL; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 

В основной программе:

String storeUrl = "file:///C:/Users/JimStandard/Desktop/Test.odt"; 
XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
    XStorable.class, xTextDocument); 
PropertyValue[] storeProps = new PropertyValue[1]; 
storeProps[0] = new PropertyValue(); 
storeProps[0].Name = "Overwrite"; 
storeProps[0].Value = new Boolean(true); 
try { 
    xStorable.storeToURL(storeUrl, storeProps); 
} catch (com.sun.star.io.IOException ex) { 
    ex.printStackTrace(System.err); 
    System.exit(1); 
} 
try { 
    URL url = new URL(storeUrl); // this is 
    Path testPath = Paths.get(url.toURI()); 
    byte[] data = Files.readAllBytes(testPath); 
    System.out.println("Length = " + data.length); 
} catch (java.io.IOException ex) { 
    ex.printStackTrace(System.err); 
    System.exit(1); 
} catch (URISyntaxException ex) { 
    ex.printStackTrace(System.err); 
    System.exit(1); 
} 
+0

Ok спасибо. Но разве я не могу сделать это, не сохраняя файл на моем диске? это было бы намного лучше. Найден метод readFileToByteArray(); Но он не может использовать его в моем xtextdocument. – FreeKill

+0

Насколько я знаю, единственный способ - сохранить файл. В документации [readFileToByteArray()] (https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#readFileToByteArray (java.io.File)): Читает содержимое файла в массив байтов. " Он принимает параметр [java.io.File] (http://docs.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true), поэтому он находится на диск. –

+0

Во всяком случае, почему было бы «намного лучше» не сохранять на диск? В этом случае, зачем нужен массив байтов? [XStorable] (https://www.openoffice.org/api/docs/common/ref/com/sun/star/frame/XStorable.html#storeToURL) должен принять адрес сервера. –