我正在尝试将我的odt文件放入ByteArray中,以便将其上传到我的服务器。 我想我在这里找到了如何做到的方式:How can I generate Byte array from an ODT file 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 :(得分: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);
}