Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查文件类型和组织最终字符串的有效方法';s(爪哇)_Java_File_Oop - Fatal编程技术网

Java 检查文件类型和组织最终字符串的有效方法';s(爪哇)

Java 检查文件类型和组织最终字符串的有效方法';s(爪哇),java,file,oop,Java,File,Oop,我正在编写一个程序,允许将列从数据库表导出到工作簿。现在,用户可以选择不同类型的数据库文件。到目前为止,我只有一个允许连接到Access文件的Access驱动程序连接: private final String ACCESS_DRIVER_CONN = "jdbc:ucanaccess://"; //class variable 我在同一个类中使用此方法: public Connection createConnection() throws IOException { Connect

我正在编写一个程序,允许将列从数据库表导出到工作簿。现在,用户可以选择不同类型的数据库文件。到目前为止,我只有一个允许连接到Access文件的Access驱动程序连接:

private final String ACCESS_DRIVER_CONN = "jdbc:ucanaccess://"; //class variable
我在同一个类中使用此方法:

public Connection createConnection() throws IOException {
    Connection result = null;
    DatabaseFileUtility dbUtil = new DatabaseFileUtility();
    String dbFileLoc = "";  // is the location of database selected
    String fileType = "";       

    while(!dbUtil.isValidFile(fileType) && dbFileLoc != null) {
        dbFileLoc = dbUtil.getFileLocation();
        if(dbFileLoc != null) {
            fileType = dbUtil.getFileExtension(dbFileLoc);
        }
    }

    if(dbFileLoc != null) {
        try {
            if(fileType.equalsIgnoreCase(FileExtensions.ACCDB)) {
                result = DriverManager.getConnection(ACCESS_DRIVER_CONN + dbFileLoc);
            }

            // add more DB file types here
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    return result;
}
我的经理没有这样做,而是问我是否可以将包含连接驱动程序的所有字符串写入文本文件。但是我使用我创建的FileExtensions类来确定用户试图打开的文件类型。这是FileExtensions类:

public abstract class FileExtensions {
    public static final String ACCDB = "accdb";
    public static final String XLS = "xls";
}
我还使用DatabaseFileUtility类中的文件扩展名来确定它们打开的文件是否有效:

public boolean isValidFile(String fileType) {
    boolean result = false;

    if(fileType instanceof String) {
        switch(fileType) {
            case FileExtensions.ACCDB: result = true;
                break;

            // insert more cases/db-file-extensions here

            default: result = false;
                break;
        }
    }
    return result;
}
和我的ExcelFileUtility类中的相同方法,只是案例应该只包含Excel文件才能返回true


我知道这不是最有效的方法。但这是我第一次独自编写这么大的程序,我还不知道如何组织。我的经理问我是否可以在文本文件中编写最终字符串,我知道这将使非程序员更容易添加更多连接。但既然我使用文件扩展名进行检查,而且它们也是最终变量,那么我是否也应该为扩展名创建单独的文本文件?实际上,这种(文件扩展名)检查是否有效?有没有一种更简单、更有组织、更有效率的方法

在文本或配置文件中放置位置等通常不是一件坏事,因为它将配置与逻辑分离。我建议使用XML文件或类似的文件,而不是纯文本文件,以使其更通用,更容易被大多数编程语言解析。然后,您可以编写一个类,读取配置一次,并将其存储起来供其他类访问。通过这种方式,您不必每次需要访问配置时都解析文本文件。@brimborium好的,我做了一些关于如何编写/使用XML的研究,并实际使用它进行了编码。但我的问题是,我希望非程序员能够改变一些事情,比如如果他们想添加更多的连接或扩展,这在XML中当然是可能的。让他们使用一个不直接显示XML代码的XML编辑器。周围有很多这样的人。我只是认为最好使用这些格式之一,而不是自定义文本格式,然后您必须自己解析。文本格式更容易受到攻击,因为多年来它是由一个人(您)而不是整个社区实现的。