我今天有一个关于输入和输出的演讲,但它似乎并没有解释文本文件的位置等。
这是我的代码:
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);
}
}
我收到文件未找到异常,但文本文件与程序在同一个文件夹中?
答案 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"));
}
}