首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FileInputStream、Scanner、next()和useDelimiter读取多行.txt文件

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

Stack Overflow用户
提问于 2016-10-08 11:22:18
回答 1查看 305关注 0票数 0

我有一个文本文件,其中包含:

代码语言:javascript
复制
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

我使用下面的代码将它读入一个二维数组中:

代码语言:javascript
复制
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]"),但这只是用每行的""抵消了第一行之后的所有内容。我该如何去纠正这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2016-10-09 05:21:57

我找到了我自己问题的答案。

问题出在这段代码中:

代码语言:javascript
复制
// 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的方式。我通过将代码更改为:

代码语言:javascript
复制
// 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行的所有新行代码条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39928351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档