Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro InvalidPathException

javax.servlet.ServletException: java.nio.file.InvalidPathException: Illegal char <:> at index 22: /casadocodigo/livros/D:\casadocodigo\projeto\capas\android-featured_large.png

Boa noite!

Estou tentando salvar o livro e aparece a mensagem acima, o que preciso fazer para corrigir? Estou utilizando ambiente Windows!

6 respostas

Oi Cleiton,

Seu path está inválido: /casadocodigo/livros/D:\casadocodigo\projeto\capas\android-featured_large.png

parece que você misturou o path linux com windows

Como está essa configuração?

solução!

Boa noite Otávio,

Meu codigo está assim: FileSaver.java

package br.com.casadocodigo.loja.infra;

import java.io.IOException;

import javax.servlet.http.Part;

public class FileSaver {

public static final String SERVER_PATH = "/casadocodigo";

    public String write(Part arquivo, String path) {
        String relativePath = path + "/" + arquivo.getSubmittedFileName();
        String fullPath = SERVER_PATH + "/" + relativePath;
        try {
            arquivo.write(fullPath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return relativePath;
    }

}

AdminLivrosBean.java

@Transactional
    public String salvar() {
        FileSaver fileSaver = new FileSaver();
        String capaPath = fileSaver.write(capaLivro, "livros");
        livro.setCapaPath(capaPath);
        dao.salvar(livro);

        context.getExternalContext()
            .getFlash().setKeepMessages(true);
        context
            .addMessage(null, new FacesMessage("Livro cadastrado com sucesso!"));

        return "/livros/lista?faces-redirect=true";
    }

Alterei o o caminho no codigo para:

public class FileSaver {

public static final String SERVER_PATH = "C:\\casadocodigo\\livros";

    public String write(Part arquivo, String path) {
        String relativePath = path + "\\" + arquivo.getSubmittedFileName();
        String fullPath = SERVER_PATH + "\\" + relativePath;
        try {
            arquivo.write(fullPath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return relativePath;
    }

}

e mesmo assim aparece o erro:

javax.servlet.ServletException: java.nio.file.InvalidPathException: Illegal char <:> at index 31: C:\casadocodigo\livros\livros\C:\casadocodigo\android-featured_large.png

O que pode ser?

Boa noite, estou parado no curso porque não consegui resolver esse erro, alguém pode me ajudar? Desde já agradeço pela ajuda!

Oi Cleiton,

Vi que você marcou o tópico como solucionado, ainda está com problema?

Você esstá utilizando Windows, certo? Faz um favor, dá uma olhada no que está sendo retornado nessa linha

arquivo.getSubmittedFileName()

deveria retornar apenas o nome do arquivo, me parece que está vindo o path completo. Posta o erro completo também, por favor.

Boa noite!

Desculpe, não percebi que o tópico estava marcado como solucionado!

Sim, estou utilizando o Windows, a linha está retornando o caminho completo: como pode observar abaixo: adicionei uma linha para printar no console o retorno da linha e retornou o caminho completo.

public String write(Part arquivo, String path) {
        String relativePath = path + "/" + arquivo.getSubmittedFileName();
        System.out.println(arquivo.getSubmittedFileName());    
        String fullPath = SERVER_PATH + "/" + relativePath;
        try {
            arquivo.write(fullPath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return relativePath;
    }

Console:

19:00:02,620 INFO  [stdout] (default task-1) C:\casadocodigo\android-featured_large.png

Erro:

ERROR [io.undertow.request] (default task-2) UT005023: Exception handling request to /casadocodigo/livros/form.xhtml: javax.servlet.ServletException: java.nio.file.InvalidPathException: Illegal char <:> at index 22: /casadocodigo/livros/C:\casadocodigo\android-featured_large.png

Caused by: javax.faces.el.EvaluationException: java.nio.file.InvalidPathException: Illegal char <:> at index 22: /casadocodigo/livros/C:\casadocodigo\android-featured_large.png