Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileNotFoundException不断出现_Java_Object_Deserialization - Fatal编程技术网

Java FileNotFoundException不断出现

Java FileNotFoundException不断出现,java,object,deserialization,Java,Object,Deserialization,我正在制作一个程序,我必须制作一个文件,然后反序列化该文件中的对象。当我给文件命名时,比如“contacts.dat”,我会得到一个FileNotFoundException 代码如下: public static void main(String[] args) { String inputstring = Input.getString("Please enter the name of the file containing the contacts: "); TreeMa

我正在制作一个程序,我必须制作一个文件,然后反序列化该文件中的对象。当我给文件命名时,比如“contacts.dat”,我会得到一个
FileNotFoundException

代码如下:

public static void main(String[] args) {
    String inputstring = Input.getString("Please enter the name of the file containing the contacts: ");
    TreeMap< String, Contact > contactlist = null;

    ObjectInputStream in;
    try {
        in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(inputstring)));
        contactlist = (TreeMap< String, Contact >) in.readObject();
        in.close();
    }
    catch(ClassNotFoundException | EOFException emptyexcptn) {
        System.out.println("The file provided is currently empty.");
        contactlist = new TreeMap< String, Contact >();
    }
    catch(IOException ioexcptn) {
        ioexcptn.printStackTrace(System.out);
        System.out.println("Error reading file: " + inputstring);
        System.exit(1);
    }
publicstaticvoidmain(字符串[]args){
String inputstring=Input.getString(“请输入包含联系人的文件名:”);
TreeMapcontactlist=null;
目标输入流;
试一试{
in=new ObjectInputStream(new BufferedInputStream(new FileInputStream(inputstring)));
contactlist=(TreeMap)在.readObject()中;
in.close();
}
捕获(ClassNotFoundException | EOFEException EmptyExceptn){
System.out.println(“提供的文件当前为空。”);
contactlist=新树映射();
}
捕获(IOException ioexcptn){
ioexcptn.printStackTrace(系统输出);
System.out.println(“读取文件时出错:“+inputstring”);
系统出口(1);
}
以下是异常打印的内容:

java.io.FileNotFoundException:contacts.dat(系统找不到指定的文件) 位于java.io.FileInputStream.open0(本机方法) 在java.io.FileInputStream.open(FileInputStream.java:195) 位于java.io.FileInputStream。(FileInputStream.java:138) 位于java.io.FileInputStream。(FileInputStream.java:93) 位于UnitEight.assignmentweight.main(AssignmentEight.java:16) 读取文件时出错:contacts.dat


new FileInputStream()
的参数是
String inputstring=Input.getString(“请输入包含联系人的文件名:”);
…如果
Input.getString
返回文件的路径,则仍然指向错误的路径

打印
Input.getString()
…的结果(如果有),这将为您提供一个关于那里发生了什么的线索。

来自API文档-

构造细节

FileInputStream
公共FileInputStream(字符串名称)引发FileNotFoundException

通过打开与实际文件(文件系统中以路径名命名的文件)的连接来创建FileInputStream。将创建一个新的FileDescriptor对象来表示此文件连接

首先,如果有一个安全管理器,将使用name参数作为其参数调用其checkRead方法

如果命名文件不存在,是目录而不是常规文件,或者由于某些其他原因无法打开进行读取,则会引发FileNotFoundException

Parameters:name-依赖于系统的文件名。Throws:FileNotFoundException-如果文件不存在,是目录而不是常规文件,或者由于某些其他原因无法打开以进行读取。SecurityException-如果存在安全管理器且其CheckRead方法拒绝对该文件的读取访问

总结为一个工作示例

当您使用FileInputStream(字符串文件名)时,请通过指定文件的完整(绝对)路径进行尝试,以便您的程序可以找到它。例如:如果text.dat文件位于共享驱动器上Z:您必须作为参数传递给构造函数的字符串将是


“Z:\\text.dat”在上面的示例中,最好使用File.separator,而不是使用操作系统特定的斜杠字符,它看起来像“Z”+File.separator+“text.dat”.

给出文件的完整路径,tryIt正在当前目录中查找该文件。正如dev所说,您始终希望使用完整路径。顺便说一句,您还应该始终关闭finally块中的资源(文件、流),以便在抛出异常时清理所有内容。记住,任何代码行都可以抛出异常(内存不足、空ptr等),您应该在这种假设下编写防御代码。未能使用“finally”块是许多代码上的巨大错误源。
ClassNotFoundException
并不意味着提供的文件当前为空不要对错误消息撒谎。打印异常本身。70%无意义的引号,则摘要是错误的。您不需要使用完整的路径名。您只需要使用正确的路径名:如果是相对的,则是相对于当前工作目录。斜杠字符
/
不是“特定于操作系统的”在Java中。我试图突出显示个人经常误入歧途的项目。使用API始终是学习类如何工作的最佳方法。不,您不必使用File.separator,尽管它比使用正斜杠更好。不,您不必使用完整路径,但许多较新的程序员并不完全理解相对路径的概念如果你知道你的完整路径,并且你这样尝试,你肯定不会试图访问正确的文件。所以当你说“你需要指定完整路径”时,你的意思是“你不必使用完整路径”。下定决心。编辑已完成,但您和其他许多人在评论提供的解决方案时不必是个混蛋。人们加入本网站是为了从主题专家那里获得答案。为了保持活力,本论坛的用户应该欢迎新来者的合作,而不是抨击他们及其问题/评论/解决方案。是的,有一个标准保持所提供信息的质量,但这可以以一种受欢迎的方式进行。