From f6f6586c4e7b44f3776a6f5f3d9668ec8a256c92 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Mon, 12 Jun 2006 19:54:39 +0000 Subject: [PATCH] better handling of non-existent files in open method git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@51 f203690c-595d-4dc9-a70b-905162fa7fd2 --- .../com/healthmarketscience/jackcess/Database.java | 3 +++ .../healthmarketscience/jackcess/JetFormat.java | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/java/com/healthmarketscience/jackcess/Database.java b/src/java/com/healthmarketscience/jackcess/Database.java index 51bc445..209173e 100644 --- a/src/java/com/healthmarketscience/jackcess/Database.java +++ b/src/java/com/healthmarketscience/jackcess/Database.java @@ -177,6 +177,9 @@ public class Database { * @param mdbFile File containing the database */ public static Database open(File mdbFile) throws IOException, SQLException { + if(!JetFormat.mayBeMdbFile(mdbFile)) { + throw new FileNotFoundException("database file is empty or nonexistent"); + } return new Database(openChannel(mdbFile)); } diff --git a/src/java/com/healthmarketscience/jackcess/JetFormat.java b/src/java/com/healthmarketscience/jackcess/JetFormat.java index d6925b6..0ecfdcd 100644 --- a/src/java/com/healthmarketscience/jackcess/JetFormat.java +++ b/src/java/com/healthmarketscience/jackcess/JetFormat.java @@ -27,6 +27,8 @@ King of Prussia, PA 19406 package com.healthmarketscience.jackcess; +import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; @@ -112,13 +114,23 @@ public abstract class JetFormat { public final Charset CHARSET; public static final JetFormat VERSION_4 = new Jet4Format(); + + /** + * @return true if the given file could possibly be a database + * file. + */ + public static boolean mayBeMdbFile(File file) throws IOException + { + // no chance of reading the file format if none of these is true + return(file.exists() && file.canRead() && (file.length() >= 1L)); + } /** * @return The Jet Format represented in the passed-in file */ public static JetFormat getFormat(FileChannel channel) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1); - channel.read(buffer, OFFSET_VERSION); + int bytesRead = channel.read(buffer, OFFSET_VERSION); buffer.flip(); byte version = buffer.get(); if (version == CODE_VERSION_4) { -- 2.39.5