0

我正在做一个项目,需要我将所有信息从 txt 文件复制到数组中。txt 的内容如下所示。我在这里想要的是我想将所有商品名称和描述分别抓取到它的数组中。

GoodTitle        Description            
    Gold       The shiny stuff
    Wheat   What wheaties are made of
    Wood    To make more ships
    Spices  To disguise the taste of rotten food
    Tobacco Smoko time
    Coal    To make them steam ships go
    Coffee  Wakes you up
    Tea Calms you down

到目前为止我做了什么:

public void openFile()
    {
        ArrayList <String> ShippingTokens = new ArrayList<String>();
        try{
            FileInputStream fstream = new FileInputStream("D://Shipping.txt");
            // Use DataInputStream to read binary NOT text.
                    BufferedReader br = new BufferedReader (new InputStreamReader (fstream));
            String strline;
            while ((strline = br.readLine()) != null){ 
                strline = strline.trim();

            if ((strline.length()!=0)) {
                String[] Shippings = strline.split("//s+");
                ShippingTokens.add(Shippings[TOKEN_COLUMN]);
            }

        }

        for (String s : ShippingTokens) {
            System.out.println(s);
        }

        in.close();
        } catch (Exception e){
            System.err.println("Error");
        }

    }
4

3 回答 3

1

首先,Java SE 7 确实简化了文件处理,所以我建议您使用它。

try(BufferedReader reader = Files.newBufferedReader(Paths.get("D://Shipping.txt"), StandardCharsets.UTF_8)) { 
    List<String> lines = Files.readAllLines(reader, StandardCharsets.UTF_8);
    for(String line : lines) {
         String[] shipping = line.split("//s+");
         //now do whatever you want with the values
    }
}
于 2013-10-24T09:10:51.310 回答
0

一种可能的解决方案是首先读取字符串的第一个单词,并将其存储在数组中。然后您可能想要存储该行的其余部分,这可以通过各种方式完成。一种可能的解决方案是读取整行,将第一个单词存储为 GoodTitle,删除第一个单词并将字符串的其余部分存储为描述,我不太确定 BufferedReaders 在 Java 中是如何工作的。

您可能要考虑改用扫描仪。 http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

它带有诸如 next() 和 nextLine() 之类的方法,这可能会简化您的解决方案。

您确定要将其存储在数组中吗?将信息存储在以 GoodTitle 作为键的 HashMap 中可能更有意义。

于 2013-10-24T09:16:37.350 回答
0

请确保您在课堂上定义了 TOKEN_COLUMN。

 ShippingTokens.add(Shippings[TOKEN_COLUMN]);

如果你的TOKEN_COLUMN value is 0 那么你的输出将如下所示。

GoodTitle   
Gold
Wheat
Wood
Spices
Tobacco
Coal
Coffee
Tea
于 2013-10-24T09:13:03.120 回答