aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java22
-rw-r--r--src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java6
-rw-r--r--src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java4
3 files changed, 18 insertions, 14 deletions
diff --git a/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java b/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java
index 66c1cbdb0e..9c4bc26135 100644
--- a/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java
+++ b/src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java
@@ -18,12 +18,8 @@
package org.apache.poi.hpsf.examples;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.util.Date;
import org.apache.poi.hpsf.CustomProperties;
@@ -38,7 +34,7 @@ import org.apache.poi.hpsf.WritingNotSupportedException;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.DocumentInputStream;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
/**
* <p>This is a sample application showing how to easily modify properties in
@@ -99,12 +95,10 @@ public class ModifyDocumentSummaryInformation {
/* Read the name of the POI filesystem to modify from the command line.
* For brevity to boundary check is performed on the command-line
* arguments. */
- File poiFilesystem = new File(args[0]);
+ File summaryFile = new File(args[0]);
/* Open the POI filesystem. */
- InputStream is = new FileInputStream(poiFilesystem);
- POIFSFileSystem poifs = new POIFSFileSystem(is);
- is.close();
+ NPOIFSFileSystem poifs = new NPOIFSFileSystem(summaryFile, false);
/* Read the summary information. */
DirectoryEntry dir = poifs.getRoot();
@@ -174,6 +168,7 @@ public class ModifyDocumentSummaryInformation {
/* Read a custom property. */
Object value = customProperties.get("Sample Number");
+ System.out.println("Custom Sample Number is now " + value);
/* Write the custom properties back to the document summary
* information. */
@@ -185,10 +180,9 @@ public class ModifyDocumentSummaryInformation {
dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
/* Write the POI filesystem back to the original file. Please note that
- * in production code you should never write directly to the origin
- * file! In case of a writing error everything would be lost. */
- OutputStream out = new FileOutputStream(poiFilesystem);
- poifs.writeFilesystem(out);
- out.close();
+ * in production code you should take care when write directly to the
+ * origin, to make sure you don't loose things on error */
+ poifs.writeFilesystem();
+ poifs.close();
}
}
diff --git a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
index 3f60b4bda2..7aea791b3b 100644
--- a/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
+++ b/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
@@ -693,6 +693,12 @@ public class NPOIFSFileSystem extends BlockStore
"not be called. Use writeFilesystem(OutputStream) instead"
);
}
+ if (! ((FileBackedDataSource)_data).isWriteable()) {
+ throw new IllegalArgumentException(
+ "POIFS opened in read only mode, so writeFilesystem() may " +
+ "not be called. Open the FileSystem in read-write mode first"
+ );
+ }
syncWithDataSource();
}
diff --git a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java
index fc0009c953..a4353752fe 100644
--- a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java
+++ b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java
@@ -49,6 +49,10 @@ public class FileBackedDataSource extends DataSource {
this.channel = channel;
this.writable = !readOnly;
}
+
+ public boolean isWriteable() {
+ return this.writable;
+ }
@Override
public ByteBuffer read(int length, long position) throws IOException {