当前位置: 首页 > 面试题库 >

getResourceAsStream(“ Words.txt”)和FileInputStream(“ ./ src / package /Words.txt”)之间有什么区别?

葛书
2023-03-14
问题内容

我目前正在编写一个基于servlet的应用程序(客户端)。我试图在代码所在的同一包中获取一个文本文件。我遇到的所有方法都使用MyClass.class.getResourceAsStream("Words.txt")classLoader.getResourceAsStream("Words.txt")获取了文本文件(例如:SO1,SO2)。但是我已经尝试过FileInputStream("./src/package/Words.txt")了,文本文件仍然可以成功加载。

有什么区别?为何getResourceAsStream鼓励使用该方法


问题答案:

目前,您正在开发人员工作站上,并且可能正在通过IDE运行您的应用程序。Tomcat恰好是从IDE项目根目录启动的,因此使用

new FileInputStream("./src/package/Words.txt")

允许读取存储在项目src目录中的文件。

但这不是项目在生产中的运行方式。在生产中,将使用Shell脚本从完全不同的目录启动Tomcat服务器。生产服务器将根本没有源项目。它所拥有的只是Tomcat,以及构成该项目构建的工件的war文件。

因此,将根本没有src目录,并且文件Words.txt甚至不会在文件系统上的任何位置。它只会是war文件(实际上是zip文件)的入口,该文件WEB- INF/classes/package.class编译器从Java源文件生成的文件一起位于下面。

因此,为了能够读取该“文件”,您不能使用文件IO:“文件”在文件系统中不存在。您需要使用ClassLoader,它将在war文件中找到“文件”并从那里加载它。

当应用程序从爆炸的战争结构运行时,这在开发过程中也将很好:类加载器将在IDE所使用的目标目录下找到用于存储类文件和资源文件的类。

请注意,如果资源在软件包中,com.foo而MyClass在同一软件包中,则需要加载的资源是

MyClass.class.getResourceAsStream("Words.txt")

要么

AnyOtherOfYourClassesWhateverThePackageIs.class.getResourceAsStream("/com/foo/Words.txt")

要么

classLoader.getResourceAsStream("com/foo/Words.txt")


 类似资料:
  • 问题内容: 我试图将文件加载到Web应用程序中,FileNotFound但使用时出现异常FileInputStream。但是,使用相同的路径时,我能够加载文件getResourceAsStream()。两种方法有什么区别,为什么一种方法有效而另一种无效? 问题答案: 在和配偶的行为在本地磁盘文件系统上。问题的根本原因是其中的相对路径取决于当前工作目录。即启动JVM(在你的情况下为:Web服务器的目

  • 我想用开始我的项目 使用时: 当我使用时,它工作得很好 那么,和之间有什么区别

  • 在Java中,是否有明确的规则来规定何时使用每个访问修饰符,即默认的(包私有),,和,同时使和处理继承?

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 我试图在中加载文件,而使用时却出现异常。但是,使用相同的路径时,我能够加载文件。两种方法有什么区别,为什么一种方法有效而另一种无效? 问题答案: 在和配偶的行为在本地磁盘文件系统上。问题的根本原因是其中的相对路径取决于当前工作目录。即从中启动JVM(在你的情况下为:Web服务器的目录)的目录。例如,这可能是或完全不同的东西,但是却并非 如此,或者你期望的是什么。在正常的项目中,该值为。

  • 问题内容: 在和属性用于包括一些外部实体,如图像,CSS文件,HTML文件,其他任何网页或JavaScript文件。 有没有明确区分和?在哪里或何时使用或?我认为它们不能互换使用。 我在下面给出一些使用这些属性的示例: 要引用CSS文件:在link标记内。 引用JS文件:在script标签内。 要引用图像文件:在图像标签内。 要引用另一个网页:在锚标记内。 问题答案: 是。 src 和 href