从文件

时间:2017-11-05 21:07:10

标签: java io

我试图读取数字5出现在文件中的次数。我的代码编译正常,它正好读取文件。但是,我一直得到一个NoSuchElementException并且我无法弄清楚原因。我相信它与循环有关,但无法弄清楚是什么。确切的例外是 -

什么文件? Input3.txt

    Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at fileio.main(fileio.java:45)
    Press any key to continue . . . 

这是代码。

import java.util.*;
import java.io.*;

public class fileio
{
    public static void main(String[] args)
    {
    Scanner kb = new Scanner(System.in);

    System.out.print("What file? ");
    String filename = kb.nextLine();

    Scanner theFile = null;

    try
    {
        theFile = new Scanner(new FileInputStream(filename));
    }
    catch(Exception e)
    {
        System.out.println("File not found.");
        System.exit(0);
    }

    int amount = 0;
    int number = 0;

    while(theFile.hasNext())
    {
        if(theFile.hasNextInt())
        {
            number = theFile.nextInt();

            if(number == 5)
            {
                amount++;
            }
        }

        theFile.next();
    }

    System.out.println("There were " + amount + " fives in " + filename);
}
}

该文件的名称是Input3.txt。该文件的内容只是一堆随机的单词和数字。以下是此文件中的文字 -

促销17 17我们自己2起6另外3我的。 7高16什么1每10舒适3丰富1远19还5易。 0在8个同伴中,7个居住在19个11个原则中13个在9个无法察觉的2个。 5听到9他们的4性18希望18享受0烦恼0孩子10。 6繁荣18所以9偶尔18援助6它11发现18特别13没有。 11第8条,第5条,第13条住所10包括4个,8个,1个,其余11个,如图所示。 13输送3有0隐藏19必要3装备13床2热情4立即0到15但是。 3终止10作为15 middletons 2或19 by 7 instrument。 11 Bred 3 do 4 four 10 so 3 your 6 feel 18 with。 8 No 6 Shameless 17原则17依赖1家庭3。 14开始10几个11错误5欢乐11说17痛苦8删除16达到1结束。 8状态14爆发11认为16结束13是12。 19岁到达9岁,她11岁,14岁,14岁,13岁,13岁,吵闹6岁。 2一个15课程0考虑5到0 15他13几乎没有。 0查看16四有5有16说16做1男18见0找5亲爱15害羞。 10天赋5人7小门13增加11个花园。 10从11他们18罚款1约翰2他6给5 7富8他。 10他们19岁15岁和8岁17岁1喜欢。 19改善11结束16不信任6可能7立即14家9户7赞成11 incommode。 8为什么17保持7个非常16个2个家18个月。 7考虑3同情1 10 3罕见11偶尔18援助15足19不。 5字母16 of 3 on 2变为3 6他倾向11活跃12使0到。 11附近4关系10明智9社交12惊喜1筛选10没有19 up 0 as。 11改变12文献8至3或17和16同情8 mr 16轻率。 16个中的12个是9个ferrars 5个主题8个12个享受7个或7个单调的19个小屋。 13采用14作为14 in 7类似于0乘6在14中是令人满意的。 10接下来18长9没有18给了16个1眼。 7赞美9优势14没有10他15庆祝19所以6钢琴7无保留。 14不是十六个自己13个形成7个迷住18个和蔼可亲。 8他14为什么2无力11现在期待17未来0。 6到18肯定14平静2多17最多8长4我5意味着。 18 Able 14 rent 13 15 15 in 18 do 18 we。 4罕见8没有12它7宣布5忧郁17和0英寸.16欢乐12学习2它7给他16。 18安全9害羞10恩惠14长度5全部13 20 20表示。 0他18个幸福10个15个0个16个包17个回答11个意见14少年。 10个办事处8个政党1个持续15个向外1个没有1个年龄2个少数16个解决。 2印象19至6自由裁量12了解13至3我们18感兴趣15他16卓越。 9他0显着7使用17投影7收集。 15进4大约5吃3四十18世界16有6轮0英里。 12注意2情感17在12我的2优先8冒犯6无耻17我18如果17同意。 1生命13 lain 13举行9平静9和17真12完整12她。 4大多数1英尺18每个9所以11个去了15个没有1个。 3真相0开始18个女佣0亚麻19和10个18到10后。 17 8正义2改善11年龄10第11条之间。 8没有16投影15作为1 up 3偏好3合理7令人愉快15庆祝。 15保留16和7能力7保证11耐用14早餐18使用3锯。 19和11画13个字母7形成4个远12个村17个老人9个紧凑。 9她的5休息12西4每3个点2他的7和18你知道。 15房地产13同性恋4树木繁茂17出发14 6 6 18她0。 9 6我们15是17有9它15失13门8。 13 1个单独的13个去除2个或18个费用14英寸18个15个覆盖11但9个明显11个第1个事项7个焦虑。 5舒适16达到5同志13或许16腔8他的0六10减9除了6加。 14月光12报4上12他18它7享受9宜人6依赖。 14 Timed 8 voice 18 share 16 13他的3加宽15吵18年轻。 10月11日的婚礼17相信5笑19虽然10材料19做18运动8。 7上升2尝试12提供15你11民间12所以15坐17到17。 11她4个新的12个课程10个19个生活8个17 elinor 18个欢乐。 5她3她的17个狂热8受苦2隐藏。 9 Piqued 13 favor 9 stairs 6它6使得14 exeter 18看到11。 8剩余3遇到18改善19但15全神贯注8诚意15岁。 12更好7但1长4同性恋14否认7国外0。 13附件15令人惊讶的8到6出现在11出场7轻率12所以4收集2中6出卓越。 2平铺3路5盲7住8其新3。 2 8为5完全0有19她有7有9离开8优点9享受0四。 14确保8礼貌11他的1真16和18其他19图5虽然。 9天4年龄17岁优势14结束8次充分11次吃9次表达12次旅行。 13月16日上午16点2父亲2比3同意19供应3而不是0。 18自己0帅10精致8其13属性5情妇5她13结束16胃口。 11平均5个是12个儿子2个16个卖19个也不16个说。 9儿子1分10三16男11权8男16你。 14现在16个优点2个奇迹19个效果17个阁楼19个拥有。 4

1 个答案:

答案 0 :(得分:-1)

虽然存在轻微错误,但您的代码似乎对我来说很好。您正在调用.next()和nextInt(),这意味着它会跳过文件中的一行。您需要将 theFile.next()放在else语句中。确保您的文件是可读的,如果您没有提供路径,请在项目的根目录中。

例如, list.txt 应该放在项目的根目录中。

public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);

    System.out.print("What file? ");
    String filename = kb.nextLine();

    Scanner theFile = null;

    try {
        theFile = new Scanner(new FileInputStream(filename));
    } catch (Exception e) {
        System.out.println("File not found.");
        System.exit(0);
    }

    int amount = 0;
    int number = 0;

    while (theFile.hasNext()) {
        if (theFile.hasNextInt()) {
            number = theFile.nextInt();

            if (number == 5) {
                amount++;
            }
        } else {
            theFile.next();
        }
    }

    System.out.println("There were " + amount + " fives in " + filename);
}

输入:

100
2
3
4
5
6
6
5

Output:
What file? list.txt
There were 2 fives in list.txt
BUILD SUCCESSFUL (total time: 2 seconds)

您可以发布您收到的错误以及您在文件中使用的数据吗?

使用OP提供的输入

run:
What file? list.txt
There were 27 fives in list.txt
BUILD SUCCESSFUL (total time: 3 seconds)

另一种不使用扫描仪的解决方案

public static void main(String[] args) throws FileNotFoundException, IOException {

    File file = new File("list.txt");

    BufferedReader br = new BufferedReader(new FileReader(file));

    Pattern p = Pattern.compile("(5)");
    Matcher m;

    String line;
    String term = "5";

    int amount = 0;

    while ((line = br.readLine()) != null) {
        if (line.contains(term)) {
            m = p.matcher(line);

            while(m.find()) {
                amount++;
            }
        }
    }
    System.out.println("There were " + amount + " fives in " + file.getName());
}

如果您不想使用正则表达式,还有可用的库可以计算您出现的字符数。