将文本文件输入程序?

时间:2015-02-10 17:46:37

标签: java

我今天有一个关于输入和输出的演讲,但它似乎并没有解释文本文件的位置等。

这是我的代码:

  package inputoutput;

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

public class input {

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

    String name;
    int lineCount = 0;

    File input = new File("lab1task3.txt");
    Scanner in = new Scanner(input);

    while(in.hasNextLine()){
        lineCount++;

    }
    System.out.println(lineCount);


}

}

我收到文件未找到异常,但文本文件与程序在同一个文件夹中?

3 个答案:

答案 0 :(得分:3)

请先阅读相对和绝对路径之间的区别。绝对路径是: C:\ Users \用户赛瑞\工作空间1 \输入 - 输出\ SRC \输入 - 输出\ lab1task3.txt

相对路径只是" lab1task3.txt",这是给出的。这意味着可以找到相对于工作目录的lab1task3.txt(例如,如果工作目录是" C:\ Users \ Ceri \ workspace1 \ inputoutput \ src \ inputoutput \"那么它会找到它)

但是,您也可以使用绝对路径,但请记住,这样做只会在文件位于运行它的计算机上的相同位置时才会起作用。例如,如果您使用" C:\ Users \ Ceri \ workspace1 \ inputoutput \ src \ inputoutput \"在您的代码中,只有当其他人在其计算机上具有相同的文件和位置时,它才会起作用。 请注意,如果这是一项任务,模块convenor / marker可能没有名为C:\ Users \ Ceri ... 的afolder。如果您使用相对路径提交作品,则使用您的代码的任何人只需要确保该文件在相同位置相对(例如,在同一文件夹中)。

如果这没关系,则需要使用路径中的另一个反斜杠来转义反斜杠字符。这应该有效:

package inputoutput;

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

public class input {

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

    String name;
    int lineCount = 0;

    File input = new File("C:\\Users\\Ceri\\workspace1\\inputoutput\\src\\inputoutput\\lab1task3.txt");
    Scanner in = new Scanner(input);

    while(in.hasNextLine()){
        lineCount++;

    }
    System.out.println(lineCount);


    }
}

我注意到你正在使用eclipse。你的工作目录"是你的工作区。因此,您希望将文件移动到:

C:\Users\Ceri\workspace1\inputoutput\lab1task3.txt

这适用于使用"亲属"你在开幕式上的路径。

答案 1 :(得分:1)

您混淆了类文件位置和"用户的工作目录",后者是Java用来确定文件路径的根目录(除非需要绝对路径) ,您可以通过以下方式轻松找到它的位置:

System.out.println(System.getProperty("user.dir"));

我建议你完全放弃使用文件,只需要读取数据,然后将文本文件作为程序资源:

// where you swap the name of your class for MyClass
InputStream fileResource = MyClass.class.getResourceAsStream("myFile.txt");
Scanner scanner = new Scanner(inputStream);

请注意,如果必须使用文件,请查看用户的工作目录,如上所示,然后定制文件路径,使其与此工作目录相关。

尝试:

File file = new File("src/inputoutput/lab1task3.txt");

答案 2 :(得分:0)

我的猜测是 当前工作目录 与项目位置不同。如果您的工作目录是,如果确实有该名称,肯定会找到该文件。
要解决此问题,您可以始终使用InputStream,例如:

InputStream inputStream = new InputStream("lab1task3.txt");
Scanner scanner = new Scanner(inputStream);

如果您想查看当前的工作目录,可以使用以下内容:

public class JavaApplication1 {
  public static void main(String[] args) {
       System.out.println("Working Directory = " +
              System.getProperty("user.dir"));
  }
}