使用Java在Ubuntu18.04中获取FileNotFoundException
编译我的java程序似乎工作正常,但当我尝试使用一个文件作为字符串[]args之一运行它时,我得到一个file not found异常。但是,该文件存在于目录中,我已经对拼写进行了三次检查。以下是我想做的: 这里的目录清楚地显示了我的文件 当我在这个目录上执行ls命令时,只显示我的.java和.class文件。没有.txt文件。这和我的问题有关吗? 有人能帮忙吗 编辑:我试图运行的文件的代码使用Java在Ubuntu18.04中获取FileNotFoundException,java,file,ubuntu,ubuntu-18.04,filenotfoundexception,Java,File,Ubuntu,Ubuntu 18.04,Filenotfoundexception,编译我的java程序似乎工作正常,但当我尝试使用一个文件作为字符串[]args之一运行它时,我得到一个file not found异常。但是,该文件存在于目录中,我已经对拼写进行了三次检查。以下是我想做的: 这里的目录清楚地显示了我的文件 当我在这个目录上执行ls命令时,只显示我的.java和.class文件。没有.txt文件。这和我的问题有关吗? 有人能帮忙吗 编辑:我试图运行的文件的代码 import java.io.File; import java.io.FileNotFound
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class cs3421_emul {
public static void main(String[] args) {
try {
String directory = System.getProperty("user.dir");
directory = directory.replace("\\", "\\\\");
//File file = new File(directory + "/" + args[0]);
File file = new File(args[0]);
Scanner sc = new Scanner(file);
StreamHandler stream = new StreamHandler(sc);
while(sc.hasNext()) {
String datatype = sc.next();
switch(datatype) {
case("memory"):
stream.HandleMemory();
break;
case("clock"):
stream.HandleClock();
break;
case("cpu"):
stream.HandleCPU();
break;
}
}
sc.close();
}
catch(FileNotFoundException e) {
System.out.print(e);
}
/*
String size = "0x10000";
//System.out.println("resolve substring issue " + size.substring(2));
Memory test = new Memory(size);
test.reset();
String[] hexvalues = {"0x0A", "0x0B", "0x2A", "0x2B", "0x11", "0x44", "0x23", "0x93", "0x50", "0x22", "0xAE", "0xDE", "0xAD", "0xBE", "0xEF", "0xFF"};
test.set("0x1A00", "0x10", hexvalues);
String[] hexvalues1 = {"0xAE", "0xDE", "0xAD", "0xC0", "0xDE", "0FA", "0xCE", "0xFE", "0xED", "0xCA", "0xFE", "0xBE", "0xEF", "0x30", "0xA8", "0xEE"};
test.set("0x1A10", "0x10", hexvalues1);
String[] hexvalues2 = {"0x55", "0xAA", "0x10", "0x20"};
test.set("0x1A20", "0x04", hexvalues2);
test.dump("0x1A04", "0x20");
//String[] testmemory = test.getMemory();
*/
}
}
确保您完全按照文件名编写文件名。因为Linux是区分大小写的,例如,如果您有一个名为“Sample”的文件,并且您试图打开“Sample”文件,则会出现错误
我想你和我有同样的问题。检查一下这里发生了一些非常令人困惑的事情
cs3421\u emul
的类。我认为这与源代码相对应。它显示您所在的目录名为/home/se/cs3421\u emul
假设您没有做一些非常奇怪的事情,当您运行该命令时,该目录将是当前目录(根据此屏幕截图)LocalState>rootfs>home>se>cs3421\u emul
。该目录列表显示了一个名为Sample1\u input.txt
的文件。它不显示名为cs3421\u emul.class
file的文件/home/se/cs3421\u emul
中运行ls
的输出。它显示了cs3421\u emul.class
文件。它不显示名为Sample1\u input.txt的文件
ls
(屏幕截图三)和尝试使用java
命令运行程序(屏幕截图一)时的当前目录不同
现在我不知道你在第二张截图中向我们展示了什么。这是一个映射到Linux的Windows文件系统的视图吗?或者它是您正在复制到Linux系统的目录
不管怎样,截图一和截图三都是确定的。他们从Linux的角度展示了Linux文件系统。从这个角度来看,在/home/se/cs3421\u emul
目录中没有Sample1\u input.txt
文件。那里根本没有*.txt
文件
在Linux系统上运行类似的java
命令时,JVM需要在/home/se/cs3421\u emul
目录中查看名为Sample1\u input.txt
的文件。如果不存在,则会导致FileNotFound
异常,其消息与您收到的消息相同
您需要弄清楚为什么文件
Sample1_input.txt
不在ls
输出中;i、 为什么文件不在那里 “当我在这个目录上执行ls命令时,只显示.java和.class文件。没有.txt文件。这可能与我的问题有关吗?”这就是问题所在。您确定Windows资源管理器屏幕截图中的目录(您不是在使用Ubuntu吗?)与运行程序的目录相同吗?这似乎不是问题所在。从第三个屏幕截图中可以看到,该文件实际上不在该目录中。