我有一个实现Serializable类的桌面应用程序,但现在我将它转换为带有servlet的Web应用程序,我使用Netbeans进行这项工作,我有以下代码:
InputStream input = ClassLoader.getSystemResourceAsStream(file_input);
如果file_input是来自之前序列化的对象的字节码fyle,我不知道应该把这个文件放在哪里,因为在桌面应用程序中我将它放在我所有类的同一目录中。
(我有文件,我不需要创建它)。
答案 0 :(得分:0)
首先,不要在Java EE Web应用程序中使用ClassLoader#getSystemResourceAsStream()
。相反,请使用ClassLoader#getResourceAsStream()
。我还想在Java SE桌面应用程序中使用ClassLoader#getSystemResourceAsStream()
时会产生很大的问号,以确定它是否可以分发,但是除此之外。
ClassLoader
最终从类路径加载资源。因此,您需要做的就是确保将文件放在其中一个路径中,这些路径默认由webapp的运行时类路径或覆盖,以将新文件路径添加到webapp的运行时类路径通过特定于服务器的配置设置,例如Tomcat shared.loader
的{{1}}属性。
webapp的运行时类路径所涵盖的默认路径之一是WAR的/conf/catalina.properties
文件夹。从IDE项目的角度来看,只需将文件放在“Java Source”(src)文件夹的根文件夹中,即可获得所有Java包和类。 IDE将注意它最终会在构建的WAR文件的/WEB-INF/classes
中结束。
顺便说一句,我还是假设您不从webapp中创建文件,正如您明确告诉的那样。那不行。如果实际上也需要具有写访问权限,那么您将需要一个绝对磁盘文件系统路径。例如,您可以通过将其作为VM参数或环境变量提供来进行配置。