当前位置: 首页 > 知识库问答 >
问题:

getResourceAsStream返回null,尽管调用的文件与调用的类getResourceAsStream位于相同的目录中

越季萌
2023-03-14

我导入了一个由Amazon编写的Android示例,其中涉及AWS的DynamoDB,我从这里获得了该示例,它可能是为Eclipse编写的:https://github.com/awslabs/aws-sdk-android-samples/tree/master/dynamodbmapper_userpreference

由于Android Studio(0.8.1)使用gradle而不是ant,所以在导入时,自然会在dir结构方面自动移动,因此(部分)如下所示:

PropertyLoader从awscredentials.properties获取连接到数据库DynamoDB所需的TVM凭据信息。相关方法:

public class PropertyLoader {

    private boolean hasCredentials = false;
    private String tokenVendingMachineURL = null;
    private boolean useSSL = false;
    private String testTableName = null;

    private static PropertyLoader instance = null;

    public static PropertyLoader getInstance() {
        if ( instance == null ) {
            instance = new PropertyLoader();
        }

        return instance;
    }

    public PropertyLoader() {
        try {
            Properties properties = new Properties();
            properties.load( this.getClass().getResourceAsStream( "AwsCredentials.properties" ) );

            this.tokenVendingMachineURL = properties.getProperty( "tokenVendingMachineURL" );
            this.useSSL = Boolean.parseBoolean( properties.getProperty( "useSSL" ) );
            this.testTableName = properties.getProperty( "testTableName" );

            if ( this.tokenVendingMachineURL == null || this.tokenVendingMachineURL.equals( "" ) || this.tokenVendingMachineURL.equals( "CHANGEME" ) || this.testTableName.equals( "" ) ) {
                this.tokenVendingMachineURL = null;
                this.useSSL = false;
                this.hasCredentials = false;
                this.testTableName = null;
            }
            else {
                this.hasCredentials = true;
            }
        }
        catch ( Exception exception ) {
            Log.e( "PropertyLoader", "Unable to read property file." );
        }
    }

但是,getResourceAsStream行properties.load(this.getClass().getResourceAsStream(“awscredentials.properties”);返回null。正如您在我的屏幕截图中所看到的,awscredentials.properties与PropertyLoader位于相同的dir中,并且与大小写匹配,根据我对该方法的阅读,这就是所需要的:http://mindprod.com/jgloss/getResourceStream.html

getResourceAsStream()总是返回null

我还尝试了其他一些方法,例如前缀“\”(即properties.load(this.getclass().getResourceasStream(“\awscredentials.properties”));以及复制凭据文件并将其放入src文件夹(您在此截图中看不到它,因为资源管理器按文件类型(?)排序,并将“main”放在第一位,但它存在),如下所示:

返回空值的getResourceAsStream

然而,这也没有解决这个问题。在尝试了这些选项并进行了研究后,我对它为什么返回null感到困惑。我怎么才能修好这个?

共有1个答案

谷梁子昂
2023-03-14

在/src/main/下创建了一个名为resources的dir,并将awscredentials.properties放在那里并使用

properties.load( PropertyLoader.class.getClassLoader().getResourceAsStream( "AwsCredentials.properties" ) );

而不是

properties.load( this.getClass().getResourceAsStream("AwsCredentials.properties" ) );

没有我想要的那么优雅,但它很管用。

 类似资料:
  • 我有以下问题 返回null,但是 返回InputStream,并且两个文件都在此文件夹中。有什么不对劲? 我使用的是libgdx-0.9.6

  • 问题内容: 我的项目目录结构(在Eclipse中): 在中,我有以下代码: 运行此命令时,将获得以下控制台输出: 为什么? 我放置在错误的位置了吗?我是否使用了ClassLoader API错误?还有吗 提前致谢! 问题答案: 如果在同一包装中使用 您拥有的方式 它在类路径的根目录中查找文件。你可以用 搜索规则在的javadoc和的javadoc中进行了说明。

  • 问题内容: 不知道这怎么可能。我重新阅读了getResourceAsStream,它始终返回null。 在Finder中(使用OS X和Eclipse),在test.java的旁边是test.xml 我可以在TextWrangler中打开它,并查看其中是否存在数据。 如果有什么不同,这是Junit测试。我去查看了系统上现有的Junit测试,并以与工作示例完全相同的方式来使用它(如文件所在的位置和代

  • 问题内容: 我正在从Java项目的已编译JAR中的包中加载文本文件。相关目录结构如下: 我的代码通过调用返回来加载文件。 无论我使用什么,都将始终打印输出。我不确定为什么上面的方法行不通,所以我也尝试了: 这些都不起作用。我 读 了许多 问题至今的话题,但他们都不是有帮助的-通常情况下,他们只是说,使用根路径,这我已经在做负载文件。那,或者只是从当前目录加载文件(只是),我也尝试过。该文件将使用适

  • 我知道同样的问题已经被问了很多次,但是通过已经发布的所有答案,我找不到解决方案。 首先,以下是我在项目中遇到问题后用来测试该问题的代码: 因此,根据标题,这些对getResourceAsStream()的调用都返回null,但只有在执行jar文件时,在IDE(Netbean 8.0.2)内启动时,它们都返回正确的流(单独测试不使用这段代码),我可以使用它。 所以我现在真的很困惑,我在使用netbe

  • 问题内容: 我在Java Web应用程序中具有以下结构: 在中WS.java,我在Web方法中使用以下代码: 但是它总是返回null。我需要读取该文件,并且我读到如果将文件放入其中,则可以使用进行访问,但是该方法始终返回null。 对我可能做错的任何想法? 它正在工作,但是当我Clean and Build在Project上执行了a之后,它突然停止工作了 问题答案: 据我所知,该文件必须正确地放置