Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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:文件读取,外部修改,然后再次读取,未看到修改_Java - Fatal编程技术网

java:文件读取,外部修改,然后再次读取,未看到修改

java:文件读取,外部修改,然后再次读取,未看到修改,java,Java,我有一组文件,将由基于参数的servlet提供服务。servlet将流打开到所需文件,读取、写入http响应并关闭流。现在可以手动修改和保存此文件。然后,下一次请求这个文件时,servlet打开一个流到这个文件,将其写入响应,但我看到内容不是修改的,而是旧的 如果我重新启动tomcat,servlet将以修改后的内容响应。是否可以在不重新启动的情况下读取修改后的内容 它不是tomcat缓存,从文件读取器本身读取的字符串是不变的 谢谢 下面是servlet的内容- InputStream fhan

我有一组文件,将由基于参数的servlet提供服务。servlet将流打开到所需文件,读取、写入http响应并关闭流。现在可以手动修改和保存此文件。然后,下一次请求这个文件时,servlet打开一个流到这个文件,将其写入响应,但我看到内容不是修改的,而是旧的

如果我重新启动tomcat,servlet将以修改后的内容响应。是否可以在不重新启动的情况下读取修改后的内容

它不是tomcat缓存,从文件读取器本身读取的字符串是不变的

谢谢

下面是servlet的内容-

InputStream fhandle=this.getClass().getClassLoader().getResourceAsStream("responses/"+file);

        if(fhandle!=null){
            Reader fr=new InputStreamReader(fhandle);
            PrintWriter out=resp.getWriter();
            int a=-1;
            FileWriter fos=new FileWriter("copyFile.xml"); //to compare what's read with actual file
            while((a=fr.read())>=0){
                fos.write(a);
                out.write(a);
            }
            out.flush();
            fos.close();
            fr.close();
            fr=null;
            fhandle.close();
            fhandle=null;
            System.gc();
        }
        else
            System.out.println(file+" not found");

在第一次点击servlet之后,我将编辑文件并保存它。现在,我将再次为同一个文件点击同一个servlet,而不会获得编辑的内容。

当相关文件更改时,不会动态重新加载资源。资源是源代码树的一部分,与应用程序一起分发。他们不会改变。如果您需要这种行为,您的设计就会出现严重错误。

您能提供更多关于文件修改的代码吗?这种bug的一个常见问题可能是,在修改Hi后忘记关闭文件流,谢谢您的回答。你的意思是说,文件一读就不会再读,内容来自某处吗?@Murali我不知道“不动态重新加载”可能意味着什么。重新加载到哪里?工作目录不是它加载文件的地方,因为我在删除它后尝试过,但内容仍然相同。@Murali在重新部署应用程序之前,内容将始终相同。我重复一下,如果你不这么认为的话,你的设计有严重的问题。我正在创建一个模拟Web服务,为应用程序开发提供静态响应。我想更改响应,并能够看到服务,而无需重新启动服务器。Tomcat上下文xml配置“reloadable=true”解决了这个问题。无论如何,谢谢你。