getResource не работает, но getResourceAsStream работает - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть Java-программа, которая является расширением продукта. Я хочу проверить, изменился ли файл, а затем скопировать его, если он изменился.

Я использую ClassLoader для получения ресурса, чтобы я мог получить дату последнего изменения. я: е

        boolean copyFile = false;
    String fileName = getRhumbaDirectory()+"\\stockexchanges.dict";
    try {
            File file = new File(fileName);
            Long fileLastModified = file.lastModified();
            URL url = this.getClass().getClassLoader().getResource("com/moneydance/modules/features/securityquoteload/resources/stockexchanges.dict");
            Long resourceLastModified=0L;
            if (url !=null) {
                resourceLastModified = url.openConnection().getLastModified();
            }
            debugInst.debug("ExchangeList", "getData", MRBDebug.INFO, "Modified Date "+fileLastModified+" "+ resourceLastModified);     
            if (resourceLastModified > fileLastModified)
                copyFile = true;
    }
    catch (IOException e){
        copyFile = true;
    }
    if (copyFile) {
        try {
            InputStream input = this.getClass().getClassLoader().getResourceAsStream("com/moneydance/modules/features/securityquoteload/resources/stockexchanges.dict");
            if (input == null) {
                debugInst.debug("ExchangeList", "getData", MRBDebug.INFO, "Problem creating stockexchanges.dict file");     
            }
            else {
                FileOutputStream output = new FileOutputStream(fileName);
                byte [] buffer = new byte[4096];
                int bytesRead = input.read(buffer);
                while (bytesRead != -1) {
                    output.write(buffer, 0, bytesRead);
                    bytesRead = input.read(buffer);
                }
                output.close();
                input.close();
            }
        }
        catch (IOException f) {
            debugInst.debug("ExchangeList", "getData", MRBDebug.DETAILED, "Problem copying default file"+f.getMessage());       
            f.printStackTrace();
        }

    }

код

                URL url = this.getClass().getClassLoader().getResource("com/moneydance/modules/features/securityquoteload/resources/stockexchanges.dict");

Возвращает ноль, пока код

                InputStream input = this.getClass().getClassLoader().getResourceAsStream("com/moneydance/modules/features/securityquoteload/resources/stockexchanges.dict");

возвращает допустимый поток. Разве они не должны работать?

1 Ответ

0 голосов
/ 17 сентября 2018

Благодаря «@Stephen C» его предложение нашло причину.Этот форум не сможет обеспечить обходной путь, поскольку он является собственностью приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...