繁体   English   中英

与Java中的文件实例功能的混淆:如何将任意.csv文件导入到mysql中而不是特定文件中?

[英]Confusion with File instance function in Java: How to import an arbitrary .csv file into mysql instead of a specific one?

我目前已经有将特定的.csv文件(提供的目录)导入mysql的代码。

我正在尝试对其进行调整,并尝试使用Java教程(即Java)中演示的create File()方法。 File file = new File("d:\\\\myproject\\\\java\\\\Hello.java"); 并修改代码如下:

我的代码如下所示:

import java.sql.Connection;

import java.sql.Statement;
import java.io.*;

public class ImportCsv {

    public static void main(String[] args) {
        ImportCsv.readCsvUsingLoad();
    }

    public static void readCsvUsingLoad() {

        try (Connection connection = DBConnection.getConnection()) {

            File file = new File("C:/Users/User/Desktop/Test/upload2.csv");

            String loadQuery = "LOAD DATA LOCAL INFILE '" + "file" + "' INTO TABLE txn_tbl FIELDS TERMINATED BY ','"
                    + " LINES TERMINATED BY '\n'  " + "IGNORE 1 LINES(txn_amount, card_number, terminal_id)";
            System.out.println(loadQuery);
            Statement stmt = connection.createStatement();
            stmt.execute(loadQuery);
            System.out.println("Data import success");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

但是,Intellij不断抛出FileNotFoundException。

我在这里误解了文件实例创建的用法吗?

因为您将文件名用作字符串"file"您必须删除两个引号,并且不需要创建文件,所以只需要path (字符串):

String file = "C:/Users/User/Desktop/Test/upload2.csv";

String loadQuery = "LOAD DATA LOCAL INFILE '" + file + "' "
        //---------------------------------------^^
        + "INTO TABLE txn_tbl FIELDS TERMINATED BY ',' "
        + "LINES TERMINATED BY '\n'  " 
        + "IGNORE 1 LINES(txn_amount, card_number, terminal_id)";

可以像这样使用getAbsolutePath另一种方式:

File file = new File("C:/Users/User/Desktop/Test/upload2.csv");
String path = file.getAbsolutePath();

String loadQuery = "LOAD DATA LOCAL INFILE '" + path + "' "
        //---------------------------------------^^
        + "INTO TABLE txn_tbl FIELDS TERMINATED BY ',' "
        + "LINES TERMINATED BY '\n'  "
        + "IGNORE 1 LINES(txn_amount, card_number, terminal_id)";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM