在Java程序中找不到资源文件

在Java程序中找不到资源文件,java,Java,我尝试了所有可能的路径,但找不到文件路径 public class JobOrderGenerator { private File file = new File("/resources/Shop-Order.xlsx"); private int sheetNumber = 0; public JobOrderGenerator(List<ShopOrder> shopOrder) throws InvalidFormatException, IOEx

我尝试了所有可能的路径,但找不到文件路径

public class JobOrderGenerator {

    private File file = new File("/resources/Shop-Order.xlsx");
    private int sheetNumber = 0;

    public JobOrderGenerator(List<ShopOrder> shopOrder) throws InvalidFormatException, IOException {

        for (ShopOrder shopOrder1 : shopOrder) {

            writeToSpecificCell(2, 1, sheetNumber, shopOrder1.getPo_number()); //Po Number
            writeToSpecificCell(7, 3, sheetNumber, shopOrder1.getPo_number()); //Part Number
            LocalDate date = shopOrder1.getPo_due_date();
            String dateToString = date.toString();
            writeToSpecificCell(1, 2, sheetNumber, dateToString); //Due_Date
            writeToSpecificCell(7, 5, sheetNumber, Integer.toString(shopOrder1.getPart_quantity())); //Quantity
            //writeToSpecificCell(1,2,sheetNumber, shopOrder.get); //Material
            writeToSpecificCell(8, 3, sheetNumber, shopOrder1.getPart_decription()); //Part Description
            //writeToSpecificCell(1,2,sheetNumber, shopOrder.getCustomer()); //Customer
            writeToSpecificCell(10, 1, sheetNumber, shopOrder1.getMachine_number()); //Machine

            sheetNumber++;

        }
    }

    void writeToSpecificCell(int rowNumber, int cellNumber, int sheetNumber, String value) throws InvalidFormatException, IOException {

        if(file.exists()){
            System.out.println("Was was found");
        } else {
            System.out.println("File was NOT found");
        }
公共类JobOrderGenerator{
私有文件File=新文件(“/resources/Shop Order.xlsx”);
私家车号码=0;
public JobOrderGenerator(List shopOrder)引发InvalidFormatException,IOException{
用于(ShopOrder ShopOrder 1:ShopOrder){
writeToSpecificCell(2,1,sheetNumber,shopOrder1.getPo_number());//采购订单编号
writeToSpecificCell(7,3,sheetNumber,shopOrder1.getPo_number());//零件号
LocalDate日期=shopOrder1.getPo_到期日();
字符串dateToString=date.toString();
writeToSpecificCell(1,2,sheetNumber,dateToString);//到期日
writeToSpecificCell(7,5,sheetNumber,Integer.toString(shopOrder1.getPart_quantity());//数量
//writeToSpecificCell(1,2,sheetNumber,shopOrder.get);//物料
writeToSpecificCell(8,3,sheetNumber,shopOrder1.getPart_decription());//零件说明
//writeToSpecificCell(1,2,sheetNumber,shopOrder.getCustomer());//客户
writeToSpecificCell(10,1,sheetNumber,shopOrder1.getMachine_number());//机器
sheetNumber++;
}
}
void writeToSpecificCell(int rowNumber、int cellNumber、int sheetNumber、字符串值)引发InvalidFormatException、IOException{
if(file.exists()){
System.out.println(“被发现”);
}否则{
System.out.println(“未找到文件”);
}

每当我运行程序时,else语句都会运行

“找不到文件”


建议?

当您执行
File File File=new File(“/resources/Shop Order.xlsx”)
时,JVM会在本地文件系统中查找该文件。由于您已将excel文件放入资源(部署在jar中),因此需要从类路径获取该文件。 试试这个:

File file = new File(JobOrderGenerator.class.getResource("Shop-Order.xlsx").toURI());

此外,就像注释中提到的@dhh一样,文件名中有一个空格。

您不能直接获取引用其路径的
文件。相反,您应该使用
类加载器来获取它

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("Shop-Order.xlsx").getFile());
如果要以静态方式加载
文件
,则必须稍微调整代码,因为不能从静态方法或块调用非静态方法的
getClass()
方法

ClassLoader classLoader = JobOrderGenerator.class.getClassLoader();
File file = new File(classLoader.getResource("Shop-Order.xlsx").getFile());

如何获取该文件?@Arpit我在intellji中单击该文件,获取其路径,每次失败时都取出一个/符号或单词,但它仍然找不到。你能显示代码吗?屏幕截图中的
商店订单
之间似乎有一个空格。xslx