2013-06-13 51 views
1

我正在制作一个程序,用于从mysql表格中的txt文件加载数据。我将创建具有特定字段的表格,然后从其中的txt文件加载数据。我正在使用java来完成这个程序。如何处理txt文件中的空格/制表符

我所写的是如下:

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个空间中的第二塔中分离。 我所有的文本文件都有特定的字段,但它们之间的空格不明。有没有办法读取所有这些空间,直到找到包含数据的下一列?

+1

使用OpenCSV,它可以处理这样的数据 – fge

+0

不,我的目的是处理这样的文件。我的程序应该读取这些文件。 – dedmar

+0

嗯,是的!这就是我说的!使用OpenCSV库,不要重新开发轮子! – fge

回答

0

我认为你应该指定你的文本文件如何包含空间数据或简单的标签,应该有某种一致性,因为sql loader terminated by只使用一个参数来标识列。

+0

没有其他方式来读取空格和制表符,直到它找到下一个collum? – dedmar

+0

以编程方式首先读取文件用“,”替换空格和制表符,并使用Terminated by, –

2

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

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

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

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

相关问题