Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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_Inputstream_Keepass - Fatal编程技术网

Java 将文件作为类路径上的资源获取

Java 将文件作为类路径上的资源获取,java,inputstream,keepass,Java,Inputstream,Keepass,我正在尝试将密钥库作为资源来读取。下面是示例代码。我遇到的问题是inputStream仍然为空 import java.io.InputStream; import java.util.List; import org.linguafranca.pwdb.kdbx.KdbxCreds; import org.linguafranca.pwdb.kdbx.simple.SimpleDatabase; import org.linguafranca.pwdb.kdbx.simple.Simple

我正在尝试将密钥库作为资源来读取。下面是示例代码。我遇到的问题是inputStream仍然为空

import java.io.InputStream;

import java.util.List;

import org.linguafranca.pwdb.kdbx.KdbxCreds;
import org.linguafranca.pwdb.kdbx.simple.SimpleDatabase;
import org.linguafranca.pwdb.kdbx.simple.SimpleEntry;
import org.linguafranca.pwdb.Credentials;

import org.apache.log4j.Logger;



public class Security {

private static final String PATH = null;
private static final String KEYSTORE_PASSWORD = "admin";
static List<SimpleEntry> entries = null;

final static Logger logger = Logger.getLogger(Security.class);

public Security(){


    //TODO: initialize security and it's passwords


}

public static void init(){

try {

        //InputStream inputStream = new FileInputStream(".keePass.kdbx");
        InputStream inputStream = Security.class.getClassLoader().getResourceAsStream("keePass.kdbx");

        // password credentials
        Credentials credentials = new KdbxCreds(KEYSTORE_PASSWORD.getBytes());

        SimpleDatabase database = SimpleDatabase.load(credentials, inputStream);
        // Jaxb implementation seems a lot faster than the DOM implementation
        // visit all groups and entries and list them to console
        entries = database.getRootGroup().getEntries();

    }catch(Exception exception){
        logger.error(exception);
    }

}
}
import java.io.InputStream;
导入java.util.List;
导入org.linguafranca.pwdb.kdbx.kdbxcles;
导入org.linguafranca.pwdb.kdbx.simple.SimpleDatabase;
导入org.linguafranca.pwdb.kdbx.simple.SimpleEntry;
导入org.linguafranca.pwdb.Credentials;
导入org.apache.log4j.Logger;
公共安全{
私有静态最终字符串路径=null;
私有静态最终字符串KEYSTORE\u PASSWORD=“admin”;
静态列表条目=null;
最终静态记录器=Logger.getLogger(Security.class);
公共安全(){
//TODO:初始化安全性及其密码
}
公共静态void init(){
试一试{
//InputStream InputStream=新文件InputStream(“.keePass.kdbx”);
InputStream InputStream=Security.class.getClassLoader().getResourceAsStream(“keePass.kdbx”);
//密码凭证
凭证凭证=新的KDBxCLIEDS(KEYSTORE_PASSWORD.getBytes());
SimpleDatabase数据库=SimpleDatabase.load(凭证、inputStream);
//Jaxb实现似乎比DOM实现快得多
//访问所有组和条目,并将它们列出到控制台
entries=database.getRootGroup().getEntries();
}捕获(异常){
记录器错误(异常);
}
}
}
首先,我认为这只是路径问题,但是即使文件本身位于类旁边,我也无法加载它

即使我使用绝对路径,结果也是一样的


我犯了什么错误?

当您使用
getClassLoader().getResourceAsStream(“…”)
时,它会尝试在类路径的根目录中查找文件。尝试使用:

Security.class.getResourceAsStream("keePass.kdbx");
在这种情况下,它将尝试在与
安全性
类相同的位置查找文件


查看更多信息

您的文件位于源路径中。但是它在类路径中吗?(compiled.class-fires所在的位置)您使用maven吗?这确实是问题所在,我没有将适当的文件夹放入运行配置中。