使用FileInputStream,Scanner,next()和useDelimiter读取多行.txt文件

时间:2016-10-08 03:22:18

标签: java arrays delimiter

我有一个包含以下内容的文本文件:

griffin.keyes   108de81c31bf9c622f76876b74e9285f    "alphabet soup" zookeeper
rosario.dawson  3e34baa4ee2ff767af8c120a496742b5    "animal doctor" admin
bernie.gorilla  a584efafa8f9ea7fe5cf18442f32b07b    "secret password"   veterinarian
donald.monkey   17b1b7d8a706696ed220bc414f729ad3    "M0nk3y business"   zookeeper
jerome.grizzlybear  3adea92111e6307f8f2aae4721e77900    "grizzly1234"   veterinarian
bruce.grizzlybear   0d107d09f5bbe40cade3de5c71e9e9b7    "letmein"   admin

我正在使用以下代码将其读入二维数组:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Credentials {
    private FileInputStream fileByteStream = null; // File input stream
    private Scanner inFS = null;                   // Scanner object
    final private String [][] credArray = new String[6][4];        

    public String[][] credArray() throws IOException {
        int i = 0;                                 // Index variable
        int j = 0;                                 // Index variable

        // Import credentials data.
        fileByteStream = new FileInputStream("credentials.txt");
        inFS = new Scanner(fileByteStream);

        // Use carriage return and tab as token separators
        inFS.useDelimiter("[\\r\\t]");

        // Create array of credentials.txt
        for (i = 0; i < NUM_ROWS_CRED; ++i) {
            for (j = 0; j < NUM_COLS_CRED; ++j) {
                credArray[i][j] = inFS.next();
            }
        }
        fileByteStream.close(); //Closes file.
        return credArray;
    } 
}

第一行是没有问题的。第2-6行靠近,第一个字符串在其前面添加了\n。例如:\nrosario.dawson

我怀疑分隔符有问题,但我不确定还有什么用。我尝试使用("[\\r\\n\\t]"),但这只是在第一行之后偏移了每行""的所有内容。我该如何纠正这个?

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的解决方案。

问题在于这部分代码:

// Create array of credentials.txt
    for (i = 0; i < NUM_ROWS_CRED; ++i) {
        for (j = 0; j < NUM_COLS_CRED; ++j) {
            credArray[i][j] = inFS.next();
        }
    }

我需要更正我从扫描仪inFS中读取信息到数组中credArray的方式。我是通过将代码更改为:

来完成的
// Create array of credentials.txt
    for (i = 0; i < NUM_ROWS_CRED; ++i) {
        for (j = 0; j < NUM_COLS_CRED; ++j) {
            credArray[i][j] = inFS.next().replaceAll("\\n", "");
        }
    }

这会自动删除第2-6行的所有新行代码条目。