解析CSV文件时

时间:2014-04-20 08:36:32

标签: java csv import-from-csv

我有这个大学的项目,他们要求我用Java创建一个简单的银行系统。到目前为止,我已经能够做得很好,除非下次存储数据以便使用它。

最近我找到了存储代码,其中我的所有数据都存储在文本文件中:

int  str     str    int
5487,Samer,Lebanon,1000000
8792,Ahmad,Lebanon,2500000

等使用io库,如:

public static void saveToFile(int[] accounts,String[] names,String[] addresses,int[] balances,int maxTmp) {
    bubbleSorting(accounts,names,addresses,balances,maxTmp);
    try {
    //What ever the file path is.
        File statText = new File("C:/Users/Wicked Angel/Desktop/customers.txt");
        FileOutputStream is = new FileOutputStream(statText);
        OutputStreamWriter osw = new OutputStreamWriter(is);    
        Writer w = new BufferedWriter(osw);
        for(int i=0;i<maxTmp;i++)
            w.write(accounts[i] + "," + names[i] + "," + addresses[i] + "," + balances[i] + System.getProperty("line.separator"));

        w.close();
    } catch (IOException e) {
        System.err.println("Problem writing to the file customers.txt");
    }
}

当我尝试导入该文本文件并将每个值设置为其特定数组时,困难就在于此。

任何帮助?

2 个答案:

答案 0 :(得分:0)

使用你的','作为分隔符。读取每一行并使用分隔符分隔它们,比如说如果我想提取String text =“holy,molly”我会做

String holy = text.substring(0,text.indexOf(','));

String molly = text.substring(text.indexOf(','))

答案 1 :(得分:0)

首先,您必须逐行阅读文本文件

// your file
File statText = new File("C:/Users/Wicked Angel/Desktop/customers.txt");
// read file using FileReader class
FileReader fr = new FileReader(statText);
BufferedReader br = new BufferedReader(fr);
// the first line is the header line and might be ignored
String line = br.readLine();
// loop through each line by reading it from the buffer
while ((line = br.readLine()) != null) {
    // process each line
}
br.close();

这将遍历文件中的每一行。 line将是一个字符串。下面是while循环中第一个字符串的示例。

line: "5487,Samer,Lebanon,1000000"

您需要做的是将每个部分分开并将其放入阵列中。这可以使用String - object中的Split()方法完成。 (单击方法名称以阅读文档)。

String[] myParts = line.Split(",");

结果将是

myParts: ["5487"] ["Samer"] ["Lebanon"] ["1000000"]

那是一个阵列。只需浏览上面的数组并将每个变量存储在适当的数组中。 ArrayList<int> accounts中的第一个元素,ArrayList<String> names中的第二个元素...下面是第一个元素的示例

// outside loop 
ArrayList<int> accounts = new ArrayList<int>();

// inside loop 
accounts.Add(Integer.parseInt(myParts(0))); 
// since it should be an integer, I parse it to int before adding it

使用ArrayList背后的原因是因为您不知道文字中有多少行。你可以检查它,但性能明智,建议使用ArrayList动态数组。 (如果需要,可以使用其他列表对象)。如果您想了解有关ArrayList的更多信息,请参阅this documentation创建,添加元素,获取元素,...

哦,也不要忘记将第一个和第三个元素强制转换为int,否则在尝试在int ArrayList中添加这些信息时会出错。如果需要,您还可以验证每个元素以确保您没有错误的数据(比如拆分行的结果是三个元素的数组,这是不正确的。)

这可以帮助您解决导入问题。祝你好运