当前位置: 首页 > 知识库问答 >
问题:

Java I/O和HashMap

扈瑞
2023-03-14

我有一个如下所示的文本文件:

A
Apple
B
Bat
C
Cat

......

我需要读取这个文本文件并将其保存在一个HashMap中,其中奇数行是键,下面的偶数行是值。例如(A,苹果)。我试过下面的代码,它不工作。有人能给我一个提示或建议,告诉我如何才能做到这一点吗?

     private HashMap<String, String> newHashMap = new HashMap<String, String>();

    Charset charset = Charset.forName("US-ASCII");

    Path path = Paths.get("file_location");
    try (BufferedReader reader = Files.newBufferedReader(path, charset)) {
        int lineCount = 0;
        String key;
        String value;

        String line = reader.readLine();
        while(line != null) {


            line = reader.readLine();

            if (lineCount % 2 == 1)
            {
            key = reader.readLine() ;

            }
            else if( lines % 2 == 0)
            {
            value = reader.readLine();

            }

            lineCount++;
           newHashMap.put(key, value);
        }

共有1个答案

申炳
2023-03-14

正如其他人所说的,if语句和lineCount变量在这里是多余的。第一次调用readline也会引起一个问题,因为您基本上跳过了文本文件中的第一行。相反,您应该在while循环中调用(line=r.readline())!=null),这样您就可以访问循环中的读取行,同时也可以避免在文件结束后进行读取。此外,while循环line=reader.readline();中的这一行也是不必要的。它导致您在每次迭代时多读一行,并且跳过它,因为它从未被使用过。除了读取while循环头中的一行之外,只需读取while循环中的另一行,并将每一行赋给正确的变量(keyvalue),如下所示,

while((line = reader.readLine()) != null) {
       key = line;
       value = reader.readLine();
       newHashMap.put(key, value);
}

在while循环之外,将string line=reader.readline();更改为

String line = "";
 类似资料:
  • 有两种机制用于I/O保护: 1、 FLAGS里的IOPL字段定义了使用I/O指令的特权级。 2、 TSS段里的I/O许可位图定义了使用I/O地址空间的特权级。 这些机制只在保护模式下工作,包含虚拟8086模式。在实模式中他们不会起作用。在实模式中,I/O空间没有任何保护。任何子程序可执行I/O指令。任意I/O端口都是可以被I/O指令寻址的。 8.3.1 I/O 特权级(I/O Privilege

  • Netty 是一个非阻塞、事件驱动的网络框架。Netty 实际上是使用 Threads(多线程)处理 I/O 事件,对于熟悉多线程编程的读者可能会需要关注同步代码。这样的方式不好,因为同步会影响程序的性能,Netty 的设计保证程序处理事件不会有同步。图 Figure 3.1 展示了,你不需要在 Channel 之间共享 ChannelHandler 实例的原因: Figure 3.1 该图显示,

  • 问题内容: 使用winsock,可以将套接字配置或将单独的I / O操作配置为“重叠”。这意味着将立即返回执行I / O的调用,而实际的操作则由单独的工作线程异步完成。 Winsock还提供“完成端口”。据我了解,完成端口充当句柄(套接字)的多路复用器。如果一个句柄不在I / O操作的中间,即它的所有I / O操作都已 完成 ,则可以对其进行多路分解。 那么,关于我的问题… Linux是否支持完成

  • 实时的web特性通常需要为每个用户一个大部分时间都处于空闲的长连接. 在传统的同步web服务器中,这意味着需要给每个用户分配一个专用的线程,这样的开销是十分巨大的. 为了减小对于并发连接需要的开销,Tornado使用了一种单线程事件循环的方式. 这意味着所有应用程序代码都应该是异步和非阻塞的,因为在同一时刻只有一个操作是有效的. 异步和非阻塞这两个属于联系十分紧密而且通常交换使用,但是它们并不完全

  • 给定一个二叉树,我想返回最大和子树的根。 最大子树:树的子树,其所有节点的总和大于任何其他子树的总和。 编辑:节点值为整数。 我可以做以下需要O(n^2)的事情。 计算左子树中所有节点的总和 计算右子树中所有节点的总和 如果左子树和右子树的和以及根的值大于当前最大和,则根存储在结果中 以左子树作为根递归调用此函数 以右子树作为根递归调用此函数。这将需要O(n^2) 我可以将其更改为自底向上的方法,

  • 这是一个众所周知的问题的略微修改版本,但我似乎无法理解这一点。 我们得到一个大小为n的数组,它包含无序的正数序列,没有重复项。我试图找到数组中未包含的最小正数,但我无法以任何方式对数组进行排序或编辑。整个过程应该是O(nlogn)时间和O(logn)空间的复杂性。 我能想到的所有解都是多项式时间复杂度的。