From 55531bcd0502dde1fea00957a1b4ec3f32b1e7f8 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Mon, 31 Dec 2018 14:58:03 +0000 Subject: [PATCH] fix channel open options for new files git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/jdk8@1257 f203690c-595d-4dc9-a70b-905162fa7fd2 --- .../jackcess/impl/DatabaseImpl.java | 16 +++++++++++----- .../jackcess/impl/JetFormatTest.java | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java index c005651..1db1c3b 100644 --- a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java +++ b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java @@ -204,9 +204,13 @@ public class DatabaseImpl implements Database, DateTimeContext /** read-only channel access mode */ public static final OpenOption[] RO_CHANNEL_OPTS = {StandardOpenOption.READ}; - /** read/write channel access mode */ + /** read/write channel access mode for existing files */ public static final OpenOption[] RW_CHANNEL_OPTS = {StandardOpenOption.READ, StandardOpenOption.WRITE}; + /** read/write/create channel access mode for new files */ + public static final OpenOption[] RWC_CHANNEL_OPTS = + {StandardOpenOption.READ, StandardOpenOption.WRITE, + StandardOpenOption.CREATE}; /** Name of the system object that is the parent of all tables */ private static final String SYSTEM_OBJECT_NAME_TABLES = "Tables"; @@ -388,7 +392,7 @@ public class DatabaseImpl implements Database, DateTimeContext readOnly |= !Files.isWritable(mdbFile); // open file channel - channel = openChannel(mdbFile, readOnly); + channel = openChannel(mdbFile, readOnly, false); closeChannel = true; } @@ -459,7 +463,7 @@ public class DatabaseImpl implements Database, DateTimeContext boolean closeChannel = false; if(channel == null) { - channel = openChannel(mdbFile, false); + channel = openChannel(mdbFile, false, true); closeChannel = true; } @@ -494,10 +498,12 @@ public class DatabaseImpl implements Database, DateTimeContext * that name cannot be created, or if some other error occurs * while opening or creating the file */ - static FileChannel openChannel(Path mdbFile, boolean readOnly) + static FileChannel openChannel( + Path mdbFile, boolean readOnly, boolean create) throws IOException { - OpenOption[] opts = (readOnly ? RO_CHANNEL_OPTS : RW_CHANNEL_OPTS); + OpenOption[] opts = (readOnly ? RO_CHANNEL_OPTS : + (create ? RWC_CHANNEL_OPTS : RW_CHANNEL_OPTS)); return FileChannel.open(mdbFile, opts); } diff --git a/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java b/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java index 36ab9bd..66c8a71 100644 --- a/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java +++ b/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java @@ -194,7 +194,7 @@ public class JetFormatTest extends TestCase { for (final TestDB testDB : SUPPORTED_DBS_TEST_FOR_READ) { final FileChannel channel = DatabaseImpl.openChannel( - testDB.dbFile.toPath(), false); + testDB.dbFile.toPath(), false, false); try { JetFormat fmtActual = JetFormat.getFormat(channel); -- 2.39.5