导入数据时在哪里存储文本文件?

时间:2015-11-24 20:58:49

标签: java resources

我在Netbeans中创建了一个JDBC,它将数据从文本文件加载到表中。当我在另一台计算机上运行程序时,文件路径(我认为这就是所谓的)将是不同的。

文本文件在我的桌面上。这意味着如果我必须从另一台计算机运行该程序,我会收到错误,因为该文件显然与原始计算机上的文件不同。

我创建了一个字符串来将数据加载到数据库中,如下所示:

String loadData = "load data local infile '/Users/Ricky/Desktop/table_data.txt'" +
                      "into table T1;";   

我可以在netbeans项目中创建一个文件夹来存储文本文件吗?那么可以从具有相同路径的任何计算机访问它吗?

3 个答案:

答案 0 :(得分:2)

解决方案是使用相对路径,如here

所述

您需要做的不是使用绝对位置(即' C:\ FolderName \ filename.txt'),而是使用相对位置(即' table_data.txt')而不是。

在您的情况下,这转换为使用

String loadData = "load data local infile 'table_data.txt'" +
                      "into table T1;";  

这样做是从与运行应用程序的位置相同的文件夹加载文件

另一种解决方案是使用JFileChooser,它允许用户从保存的任何目录中查找文件。

答案 1 :(得分:1)

如果从与数据文件相同的目录运行程序,则可以使用:

String loadData = "load data local infile 'table_data.txt'" +
                  "into table T1;";

通过指定无路径,程序将查看当前工作目录(从中启动程序的目录)。

答案 2 :(得分:0)

您可以使用可选的命令行参数:

public class Main {

    private static final String LOAD_COMMAND = "load data local infile '%s' into table T1;";
    private static final String DEFAULT_FILE = System.getProperty("user.home") + "/table_data.txt";

    public static void main(String[] args) {
        String file = (args.length > 0) ? args[0] : DEFAULT_FILE;
        String command = String.format(LOAD_COMMAND, file);
        System.out.println(command);
    }
}

如果您在Main.java中保存了上述内容,则可以轻松进行测试。

javac Main.java && java -cp . Main

会打印:

load data local infile '/Users/<your-username>/table_data.txt' into table T1;

javac Main.java && java -cp . Main /my/file

会打印:

# load data local infile '/my/file' into table T1;