2013-06-13 58 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/

相關問題