1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Como gravar um arquivo na raíz do SO, não na raiz do projeto

Boa tarde senhores, estou com um probleminha há algum tempo com essa questão.

Eu já consigo fazer o upload de um arquivo, faço a copia dele, e coloco em uma pasta qualquer dentro do meu projeto. O problema é que eu faço atualizações constantemente no meu projeto, e a cada Undeploy/Deploy eu perco todos os arquivos que estavam dentro da pasta em questão (/WebContent/Files/.. por exemplo).

Então decidi por guardar esses arquivos em outro lugar. Optei por gravar no C:/ mesmo, e decidi por mandar todos os arquivos pra lá. É aí que começa o problema.

Inicialmente a aplicação reclamava assim que a classe que fazia o uso da api FileUpload era instanciada, alegando que a variável struts.multipart.saveDir não estava setada corretamente (sim, faço uso do Struts2 nessa minha aplicação). A verdade é que ele não estava setada de forma alguma, então, eu a declarei no meu struts.xml da seguinte forma:

<constant name="struts.multipart.saveDir" value="c:/" />

Com isso, o erro sumiu, porém, me apareceu outro. Esse novo erro reclama de uma falta de permissão para gravação no diretório escolhido. Era uma exception bem estranha e longa, que no final tinha a mensagem (acesso negado). Li em alguns lugares que o windows costuma bloquear esse tipo de operação, então optei por criar o arquivo dentro da pasta Documents, do meu usuario, que é administrador. Aí a coisa ficou feia, pois tudo o que ele me retorna de erro agora é o "no result defined for action and result success". O que é estranho é que em nenhum momento eu retorno esse "success", e tentei debugar a aplicação, e o erro não chega nem na primeira linha da minha action.

Segue abaixo meus metodos:

DemandaAction:

public String incluirDemanda(){
        if(session.get("usuario")==null){
            return "errorPerm";
        }else{
            try{
                if(checkValid(demanda, ocorrencia)){
                    demanda = df.procIncluirDemanda(demanda, (Usuario)session.get("usuario"), ocorrencia, uploadFileName, upload, "C:/Users/Renan/Documents/");
                    session.put("idDemandaInc", demanda.getIdDemanda());
                    session.put("demandaInc", true);
                    return "incluirDemanda";
                }else{
                    errorLog = true;
                    refreshFormDemanda();
                    return "missInfo";
                }
            }catch(SQLException | FileException | IOException e){
                System.out.println(e.getMessage());
                erro = e.getMessage();
                return "error";
            }
        }
    }

DemandaFactory:

public Demanda procIncluirDemanda(Demanda demanda, Usuario usuario, Ocorrencia ocorrencia, String uploadFileName, File upload, String path) throws SQLException, FileException, IOException{
        conexao.conectar();
        List<Demanda> listaTEMP = ddao.byAbertasSolic(demanda.getEleitor(), demanda, false, false);
        if(listaTEMP.size()>0){
            throw new SQLException("Já existe uma demanda de mesma solicitação cadastrada no sistema, finalize-a antes de abrir outra.");
        }
        DemandaAction dac = new DemandaAction();
        demanda.setAnexo(uploadFileName);
        demanda.setStatus("EM ANDAMENTO");
        this.upload = upload;
        this.uploadFileName = uploadFileName;
        if(demanda.getSolic().equals("OUTRO")){
            demanda.setSolic(demanda.getNsolic());
        }
        if(demanda.getLocal().equals("OUTRO")){
            demanda.setLocal(demanda.getNlocal());
        }
        ddao.insert(demanda);
        demanda = ddao.one(demanda);
        lFac.executeInsert("INCLUSAO",usuario,"DEMANDA",demanda.getIdDemanda());
        dac.setDemanda(ddao.one(demanda));
        dac.setOcorrencia(ocorrencia);
        dac.getOcorrencia().setDemanda(demanda);
        dac.getOcorrencia().setUsuario(usuario);
        dac.getOcorrencia().setData(new Date());
        odao.insert(dac.getOcorrencia());
        ocorrencia = odao.one(ocorrencia);
        lFac.executeInsert("INCLUSAO",usuario,"OCORRENCIA",ocorrencia.getIdOcorrencia());
        if(upload!=null && !upload.equals("")){
            copy(demanda, path);
        }
        conexao.desconectar();
        return demanda;
    }
public void copy(Demanda dem, String filePath) throws IOException,FileException{
        if((upload.length()/1024)/1024>5){
            throw new FileException("Arquivo maior que limite de 5mb.");
        }
        String newFileName;
        if(uploadFileName.substring(uploadFileName.length()-4,uploadFileName.length()-3).equals(".")){
            newFileName = uploadFileName.substring(0, uploadFileName.length()-4)+"-"+dem.getIdDemanda()+uploadFileName.substring(uploadFileName.length()-4);
        }else{
            newFileName = uploadFileName.substring(0, uploadFileName.length()-5)+"-"+dem.getIdDemanda()+uploadFileName.substring(uploadFileName.length()-5);
        }
        File fileToCreate = new File(filePath, newFileName);
        FileUtils.copyFile(this.upload, fileToCreate);
        dem.setCaminho(filePath+"\\"+newFileName);
    }

Eu realmente nunca usei essa parte de IO do Java, e estou apanhando FEIO para ela. Se alguem puder me ajudar, ficarei imensamente grato.

  • Não escreva [Dúvida], [Pergunta], [Ajuda] ou coisas assim no título do tópico. É redundante e não é boa prática nem aqui, nem no fórum de discussões.

    ViniGodoy   12 de nov de 2013
  • Fico grato pela ajuda.

    Marcos Repteis   12 de nov de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java upload struts ou faça a sua própria pergunta.