【问题标题】:Opening CSV file using Scanner in Java在 Java 中使用 Scanner 打开 CSV 文件
【发布时间】:2014-01-19 22:19:34
【问题描述】:

我正在尝试使用 Java 中的 File 和 Scanner 打开一个 CSV 文件,但我无法使用 Scanner 打开它。下面附上代码,有什么想法吗? 相关代码在parseFile函数中

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;


    public class CIS350HW1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
            boolean quit = false;
            int year = 0;
            while(quit == false){
                printMenu();
                Scanner sc = new Scanner(System.in);
                String str = sc.next().toUpperCase();
                System.out.println(str);
                if (str.equals("Q")) {
                    System.out.println("Good bye");
                    quit = true;
                }
                else if (str.equals("3")) {
                    parseFile(args[0], Integer.parseInt(str), year);
                }
                else if (str.equals("2") || str.equals("1")) {
                    System.out.println("Please enter the year: "); //remember might not be println
                        try { 
                        year = Integer.parseInt(sc.next());
                    } catch(NumberFormatException e) {
                        System.out.print("Invalid formatted input. ");
                    }
                    if (year < 1920 || year > 2010){
                        System.out.println("Not a valid year.");
                        System.out.println();
                    }
                    parseFile(args[0], Integer.parseInt(str), year);
                }
                else {
                    System.out.println("That is not a valid selection.");
                }
            }
        }

        /**
         * prints the menu options to the consul.
         */
        public static void printMenu() {
            System.out.println("Welcome to the Oscars database!");
            System.out.println();
            System.out.println("Please make your selection:");
            System.out.println("1: Search for best picture award winner by year");
            System.out.println("2: Search for best picture award nominees by year");
            System.out.println("3: Search for actor/actress nominations by name");
            System.out.println("Q: Quit");
        }

        public static void parseFile(String args, int n, int year) {
            File file = new File(args);
            Scanner input = null;
            try {
                input = new Scanner(file);
            } catch (FileNotFoundException e) {
                System.out.println("Could not open the file for some reason.");
            }


            while(input.hasNext()) {
                String nextLine = input.nextLine();
                String token[] =  nextLine.split(",");
                if (n == 1) {
                    String tempYear[] = token[0].split(" ");
                    if (Integer.parseInt(tempYear[0]) == year 
                            && token[1].equals("Best Picture") 
                            && token[3].equals("YES")) {
                        System.out.println(token[2]);
                    }
                }
            }

            input.close();
        }

    }

请注意,代码还没有做任何事情,试图弄清楚为什么 try/catch 永远不起作用。 谢谢!

【问题讨论】:

  • 您所说的“从不工作”是什么意思?
  • 我写的错误信息“由于某种原因无法打开文件”。总是在 main 中打印并导致异常线程
  • 那么它没有找到该文件。你如何将文件名传递给你的程序?
  • 我尝试了作为参数和硬编码。该文件与程序位于同一文件夹中。
  • 找不到文件。您是使用文件的绝对路径还是相对路径?还要确保在文件路径中使用正确的斜杠字符

标签: java csv java.util.scanner


【解决方案1】:

如果您使用命令行运行程序(java CIS350HW1 file.csv),则该文件必须位于同一文件夹中。

但是,如果您从 IDE(Eclipse 或其他)运行程序,那么您的文件必须位于项目的类路径中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2020-04-11
    • 2019-09-07
    • 2017-01-18
    相关资源
    最近更新 更多