【问题标题】:Using a Dynamic path for a csv file使用 csv 文件的动态路径
【发布时间】:2015-08-16 14:41:17
【问题描述】:

我有一个保存在文件中的程序。当前代码设置为文件保存在特定路径上,但是当我从另一台计算机运行程序时,程序不起作用,我每次都需要更改路径。

 public CreateCustomer() {
    initComponents();

    ArrayList<String> ConsIDList = new ArrayList<String>();

    String csvFileToRead = "E:\\ryan_assignment_sit2\\ConsID\\consID.csv"; // Reads the CSV File. 
    BufferedReader br = null; // Creates a buffer reader.
    String line = "";
    String splitBy = ","; // Reader Delimiter

    try {
        br = new BufferedReader(new FileReader(csvFileToRead)); // Buffer Reader with file name to read.
        Scanner reader = new Scanner(System.in);
        while ((line = br.readLine()) != null) { //While there is a line to read.
            reader = new Scanner(line);
            reader.useDelimiter(splitBy);

            while (reader.hasNext()) { // While there is a next value (token).
                ConsIDList.add(reader.next());
            }
        }

    } catch (FileNotFoundException exception) { // Exception Handler if the File is not Found.
        exception.printStackTrace();
    } catch (IOException exception) { // Input/Output exception
        exception.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close(); // Close the Scanner.
            } catch (IOException exception) {
                exception.printStackTrace();
            }
        }

我将文件放在程序中名为 ConsID 的子文件夹中,并尝试将路径文件更改为

String csvFileToRead = "..\\ConsID\\consID.csv"; 

但无法从程序中读取文件。

【问题讨论】:

    标签: java filepath


    【解决方案1】:

    String csvFileToRead = "E:\ryan_assignment_sit2\ConsID\consID.csv"; 上述路径仅适用于 windows。如果你在 linux 环境下执行程序,你会得到一个 Filenotfoundexception。即使您更改了文件,您还是在硬编码文件路径。 更好的是,您可以将其作为运行时参数获取,这样程序就可以在不考虑操作系统的情况下执行。

    【讨论】:

    • 该程序只能在基于 Windows 的计算机上运行,​​所以我认为这不会产生影响。但是我需要在多台计算机上打开程序,我想知道是否可以设置一个从程序的根文件夹读取的路径
    • 将其放在共享文件夹中并使用 HTTP 访问它,以便您可以读取文件。
    • 每台计算机都需要有一个单独的文件,因此理想情况下该文件将位于应用程序的同一文件夹中。我正在寻找的是一种使用动态路径的方法,例如程序将直接搜索从其启动的同一文件夹
    【解决方案2】:

    如果您是从命令行运行程序,那么您可以将 csv 文件放在您的类路径(生成类文件的根文件夹)中,并按如下方式引用它:

    BufferedReader br = new BufferedReader(ClassLoader.getResourceAsStream("consID.csv"));
    

    【讨论】:

    • 这是我尝试的第一件事,但我得到了一个错误,我一直得到 getResourceAsStream(String) 不能从静态上下文中引用,这就是为什么我必须临时设置一个特定的路径来完成程序
    • 那么从非静态上下文调用有什么问题
    • 我不明白这个问题,你能解释一下更简单的方法吗,我是编码新手,这只是我正在做的一项任务
    • 当您尝试 getResourceAsStream 时,您必须使用静态方法中的一些非静态变量,这就是您得到“无法从静态上下文引用”的原因。所以你可以尝试从非静态方法调用。
    • @RyanTheuma .. 你能熬过去吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2020-09-17
    • 2021-06-24
    • 2018-02-09
    • 1970-01-01
    • 2011-07-05
    • 2018-07-15
    相关资源
    最近更新 更多