如何处理txt文件中的空格/制表符

时间:2013-06-13 10:09:51

标签: java jdbc

我正在制作一个程序,我将从mysql表中的txt文件加载数据。我将创建具有特定字段的表,然后我将从其中的txt文件加载数据。我正在使用java来执行该程序。

我写的内容如下:

private static String importData(Connection con, File txtFile,
    String tablename) {

  try {
    Statement stmt;

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
            ResultSet.CONCUR_UPDATABLE);
    String path = txtFile.getAbsolutePath();
    String importingdata = "LOAD DATA INFILE '"
            + path.replace('\\', '/')
            + "' INTO TABLE " + tablename
            + " FIELDS TERMINATED BY '\t'";
    System.out.println("fill the table");
    stmt.executeUpdate(importingdata);

    } catch (Exception e) {
    System.out.println(((SQLException) e).getSQLState());
    System.out.println(e.getMessage());
    e.printStackTrace();

     }
   return null;
    }

但是在这段代码中,您可以看到我已经说过字段是由制表符终止的。 如果文本文件中的列由空格和未知数量的选项卡分隔,该怎么办?

例如图片中显示的文字:

enter image description here

第一列与第二列分开一个制表符和3个空格,第二列与第三列分开2个空格。 我的所有文本文件都有特定的字段,但它们之间的分隔空格是未知的。有没有办法读取所有这些空格,直到找到包含数据的下一列?

2 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。一种是一次读取一行文件,然后使用String.split(regex)将行拆分为字段; e.g。

    String line = ...
    String fields[] = line.split("\\s+");

然后重写SQL,以便一次插入一行。

或者更好的是,使用批次;例如如下所述:http://viralpatel.net/blogs/batch-insert-in-java-jdbc/

答案 1 :(得分:0)

我认为应该指定文本文件如何包含空格或带有tab的数据,简而言之应该是某种统一性,因为sql loader terminated by只使用一个参数来标识列。