首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Java中的Scanner类读取文件

使用Java中的Scanner类读取文件
EN

Stack Overflow用户
提问于 2015-01-21 02:52:00
回答 1查看 72关注 0票数 0

我试图从文件中读取,并将输出作为标记传递给HashMap对象。好像我的程序找不到文件。这是密码。

代码语言:javascript
运行
复制
public static void main(String[] args) {


        try {
            HashMap<String, Integer> map = sortingFromAFile("file.rtf");
            System.out.println(map);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static HashMap sortingFromAFile(String fileName) throws FileNotFoundException {

        HashMap<String, Integer> map = new HashMap<String, Integer>();

        Integer count = 1;

        File file = new File(fileName);

        Scanner sc = null;
        try {
            sc = new Scanner(file);
            while(sc.hasNextLine()){
                if (map.containsKey(sc.nextLine())){
                    count+= map.get(sc.nextLine());
                }
                map.put(sc.nextLine(), count);

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


        return map;
    }

我试图读取的文件位于项目目录的根目录中。

这是错误。

代码语言:javascript
运行
复制
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at com.soumasish.Main.sortingFromAFile(Main.java:38)
    at com.soumasish.Main.main(Main.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

有什么帮助吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 02:58:52

每次打电话给sc.nextLine()时,你都会读另一行。因此,在循环的第一次迭代中,if(map.containsKey(sc.nextLine()))读取第一行,并检查它是否在映射中。count += map.get(sc.nextLine())读取第二行,从映射中获取该值并将其添加到计数中。map.put(sc.nextLine(), count)读取第三行并将计数存储在那里。如果超过三行,则循环再次运行,并读取第4/5/6行。

您需要使用一个变量来存储当前行,因为您只能读取每行一次:

代码语言:javascript
运行
复制
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            if (map.containsKey(line)){
                count+= map.get(line);
            }
            map.put(line, count);

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

https://stackoverflow.com/questions/28058822

复制
相关文章

相似问题

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