如何将getResource更改为getResourceAsStream

时间:2015-12-23 09:56:14

标签: java file

该程序与getResource运行良好,但在将其放入jar文件后,它有FileNotFoundException。它无法找到test.conf。

我的代码是

URL url = getClass().getResource("test.conf");
File fin = new File(url.getPath());

FileInputStream fis = null;
try {
    fis = new FileInputStream(fin);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

我想我可以通过使用getResourceAsStream解决问题。但我不确定如何将getResource更改为getResourceAsStream。

1 个答案:

答案 0 :(得分:0)

您的示例表明您的阅读代码已经在FileInputStream上运行。您应该能够使用更通用的InputStream。这将允许您将getResourceStream()的结果传递给您的阅读代码,而不必担心文件。

所以:

public class NumberCoverter {
public static enum ModeType { ACCURATE, FAST }; 
public ModeType modeType = ModeType.ACCURATE;//the default  
public double[] doubleValues = { 7254.22222455879789, 356798.365484464, 15464.48486495615 };    
public float[] floatValues = new float[doubleValues.length] ; //make this array the same size as doubleValues array 
public void printValues(){

    if(modeType==ModeType.ACCURATE)
        printAccurate();
    else
        printFast();

}
public void printAccurate(){

    for(int i=0; i<doubleValues.length;i++)
        System.out.println("Double precision: "+doubleValues[i]);
}
public void printFast(){
    for(int i=0; i<floatValues.length;i++) {
        floatValues[i] = (float)doubleValues[i];
        System.out.println("Single precision: "+floatValues[i]);    
    }
}
public static void main(String[] args) {

    NumberCoverter nc = new NumberCoverter();

    System.out.println("Printing in accurate mode");
    nc.printAccurate();

    System.out.println("Printing in fast mode");
    nc.printFast();

}

更改为:

URL url = getClass().getResource("test.conf");
File fin = new File(url.getPath());

FileInputStream fis = new FileInputStream(fin);

ReadResourceFromStream(fis);