Java程序创建文件,但文件不可见

Java程序创建文件,但文件不可见,java,Java,我有一个程序,它根据命令行输入替换文件中的文本。当前,它创建一个临时文件,并在新的临时文件中写入带有替换文本的字符串。这个程序在我校园计算机实验室的桌面上运行,但当我尝试在我的个人笔记本电脑上运行它时,会创建临时文件,我可以通过打印其规范路径找到它,file.exists返回true,但它不会显示在我的桌面上。 使用Windows资源管理器进行搜索不会产生任何结果 我正在运行Windows7并使用TextPad。有人知道这可能是什么原因吗?我可以提供任何其他必要的信息 编辑:我在MacPro 2

我有一个程序,它根据命令行输入替换文件中的文本。当前,它创建一个临时文件,并在新的临时文件中写入带有替换文本的字符串。这个程序在我校园计算机实验室的桌面上运行,但当我尝试在我的个人笔记本电脑上运行它时,会创建临时文件,我可以通过打印其规范路径找到它,file.exists返回true,但它不会显示在我的桌面上。 使用Windows资源管理器进行搜索不会产生任何结果

我正在运行Windows7并使用TextPad。有人知道这可能是什么原因吗?我可以提供任何其他必要的信息

编辑:我在MacPro 2011上运行Windows7,如果这有什么区别的话

编辑:我发现了问题。我下载了Comodo防病毒软件,每当我创建一个文件时,它都会在VTRoot文件夹中创建一个用于沙盒目的的文件。我能够改变设置并解决我的问题


如果您看不到temp.txt文件,那是因为它位于java源代码所在的项目目录中。但是,如果您找到了它,那么它也将不包含任何内容。原因是您没有关闭输出流,以使文件刚好就位

输出。关闭


在while循环之后。

尝试通过在创建类似文件时提供整个文件路径来创建文件

文件uri


这将通过将给定的File:URI转换为抽象路径名来创建一个新的文件实例

我发现了这个问题。我下载了Comodo防病毒软件,每当我创建一个文件时,它都会在VTRoot文件夹中创建一个用于沙盒目的的文件。我可以更改设置并解决我的问题。

如果您安装了comodo antivirus,则应按照说明操作:

1.打开comodo

2.单击设置

3.然后单击安全壳->单击自动安全壳


4.然后在顶部,取消选中启用自动包含。

您确定它没有创建文件吗?你找对地方了吗?让您的程序打印出文件的完整路径,以查看确切的查找位置。例如,调用System.out.printlntemp.getCanonicalPath;在创建临时对象之后。另外,。。。。你的试球区在哪里?如何获得文件I/O异常的通知?这是关键。临时文件的getCanonicalPath返回桌面,这是我的ReplaceText java文件所在的位置。另外,我编辑了catch块只是为了简单地回答我的问题,对不起,我应该在原始帖子中提到这一点。这是否意味着该文件已创建,但它只是没有出现?输出流已通过try with resources语句正确关闭。请查看这篇文章,尝试使用资源,这就是为什么我喜欢在这里学习新东西。感谢@RajasubaSubramanian的回复。请用1编辑代码。使用完整uri和2创建文件。写入后关闭输出流?
import java.io.*;
import java.util.*;

public class ReplaceText{
    public static void main(String[] args)throws IOException{
    if(args.length != 2){
        System.out.println("Incorrect format. Use java ClassName textToReplace filename");
        System.exit(1);
    }

    File source = new File(args[1]);
    if(!source.exists()){
        System.out.println("Source file " + args[1] + " does not exist.");
        System.exit(2);
    }


    File temp = new File("temp.txt");
    try(
        Scanner input = new Scanner(source);
        PrintWriter output = new PrintWriter(temp);

        ){
            while(input.hasNext()){
                String s1 = input.nextLine();
                String s2 = s1.replace(args[0], "a");
                output.println(s2);

            }
        }
    }
}