Sobre a incapacidade de ler os recursos estáticos do caminho raiz do projeto após o projeto SpringBoot ser iniciado por meio do pacote jar

Prefácio: Isso foi descoberto ontem à noite quando um projeto foi implantado, registre-o aqui

Sobre a incapacidade de ler os recursos estáticos do caminho raiz do projeto após o projeto SpringBoot ser iniciado por meio do pacote jar

Descrição do Problema

Depois de implantar um projeto, abri a página do projeto para teste e descobri que uma página de consulta falhou na consulta e pulou automaticamente para a página de erro. Examinei o log e descobri que uma leitura de arquivo falhou, conforme mostrado abaixo:

mensagem de erro

insira a descrição da imagem aqui

O diretório onde está localizado o arquivo a ser lido

insira a descrição da imagem aqui

O código para a parte de leitura do arquivo

    public String readFileContent() {
    
    
        File file = new File("src/main/resources/static/ticket/station_name.txt");
        BufferedReader reader = null;
        StringBuffer sbf = new StringBuffer();

        try {
    
    
            reader = new BufferedReader(new FileReader(file));
            String tempStr;
            while ((tempStr = reader.readLine()) != null) {
    
    
                sbf.append(tempStr);
            }
            reader.close();
            return sbf.toString();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            if (reader != null) {
    
    
                try {
    
    
                    reader.close();
                } catch (IOException e1) {
    
    
                    e1.printStackTrace();
                }
            }
        }
        return sbf.toString();
    }

Naquela época, fiquei bastante confuso, pois esse arquivo ainda pode ser lido durante o teste local, por que não pode ser encontrado no servidor? ? ?

Solução

Verifiquei a Internet e descobri que há um problema com o uso de Arquivo para obter recursos locais no servidor.

Motivo:
Os arquivos do diretório Resources existem no arquivo xxx.jar e não existe um caminho real no disco do servidor, na verdade é um caminho dentro do jar.

Solução 1 (método estúpido):
Carregue o arquivo a ser lido no diretório correspondente do servidor e altere o caminho do arquivo lido para o caminho correspondente ao arquivo no servidor.

Solução 2:
use o fluxo de entrada, da seguinte forma:

    public String readFileContent() throws Exception{
    
    

        String filePath = "static/ticket/station_name.txt";
        InputStream inputStream = null;
        BufferedReader reader = null;
        StringBuffer sbf = new StringBuffer();

        //文件读取
        inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);
        reader = new BufferedReader(new InputStreamReader(inputStream));
        String tempStr;
        while ((tempStr = reader.readLine()) != null) {
    
    
            sbf.append(tempStr);
        }
        reader.close();
        return sbf.toString();
    }
    public String readFileContent() throws Exception{
    
    

        String filePath = "static/ticket/station_name.txt";
        ClassPathResource resource = new ClassPathResource(filePath);
        InputStream inputStream = null;
        BufferedReader reader = null;
        StringBuffer sbf = new StringBuffer();

        //文件读取
        inputStream = resource.getInputStream();
        reader = new BufferedReader(new InputStreamReader(inputStream));
        String tempStr;
        while ((tempStr = reader.readLine()) != null) {
    
    
            sbf.append(tempStr);
        }
        reader.close();
        return sbf.toString();
    }

Deve-se notar aqui que o caminho usado é o caminho em recursos.

PS: Você também pode ir ao meu blog pessoal para ver mais conteúdo
Endereço do blog pessoal: Blog do colega de classe Xiaoguan

Acho que você gosta

Origin blog.csdn.net/weixin_45784666/article/details/121450856
Recomendado
Clasificación