Problema com acentuação de arquivos/diretórios em java no linux

3 respostas
C

Olá a todos, sou novato no fórum e estou com um probleminha.
Fiz uma aplicação java que faz uma cópia de um determinado diretório ou arquivo de um local x para outro local y.
Ele realiza a tarefa facilmente, porém quando o file path do arquivo é acentuado ou com algum caractere especial ele não encontra o arquivo/diretório.

OBS.: no windows ele funciona belezinha, já no linux é que ocorre este problema. Quando ele encontra um arquivo/diretorio acentuada a aplicação para e não consegue localizar o arquivo. Por exemplo um diretorio:

/home/aplicação

ele reconhece como

/home/aplica??o

Isso é o retorno que ele me traz, mas não encontra o diretorio/arquivo para efetuar a cópia.

Já tentei mudar a codificação da aplicação, testei quase todas as codificações desde UTF-8 a ISO e ASCII, tentei compilar o codigo diretamente no linux, e nada deu certo.

Agradeço a quem puder me dar um luz sobre este problema!

3 Respostas

nel

cleiton.rs:
Olá a todos, sou novato no fórum e estou com um probleminha.
Fiz uma aplicação java que faz uma cópia de um determinado diretório ou arquivo de um local x para outro local y.
Ele realiza a tarefa facilmente, porém quando o file path do arquivo é acentuado ou com algum caractere especial ele não encontra o arquivo/diretório.

OBS.: no windows ele funciona belezinha, já no linux é que ocorre este problema. Quando ele encontra um arquivo/diretorio acentuada a aplicação para e não consegue localizar o arquivo. Por exemplo um diretorio:

/home/aplicação

ele reconhece como

/home/aplica??o

Isso é o retorno que ele me traz, mas não encontra o diretorio/arquivo para efetuar a cópia.

Já tentei mudar a codificação da aplicação, testei quase todas as codificações desde UTF-8 a ISO e ASCII, tentei compilar o codigo diretamente no linux, e nada deu certo.

Agradeço a quem puder me dar um luz sobre este problema!

Oi Cleiton.

É possível postar o seu código?
Fica mais fácil de analisar e/ou dar sugestões.

Abraços.

C

Olá cara, segue o código básico que utilizo:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package copiadir;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 *
 * @author Cleiton
 */
public class Main {

    //Função de copia de arquivos
    public void copiarArquivo(File origemArquivo, File destinoArquivo) throws IOException {
        InputStream in = new FileInputStream(origemArquivo);
        OutputStream out = new FileOutputStream(destinoArquivo);
        // Transfere todos os bytes de in para out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }

    //Função de copia de diretorios.
    public void copiarDiretorio(File origemDiretorio, File destinoDiretorio) throws IOException {
        if (origemDiretorio.isDirectory()) {
            if (!destinoDiretorio.exists()) {
                destinoDiretorio.mkdir();
            }

            String[] children = origemDiretorio.list();
            for (int i = 0; i < children.length; i++) {
                copiarDiretorio(new File(origemDiretorio, children[i]),
                        new File(destinoDiretorio, children[i]));
            }
        } else {
            //caso encontre algum arquivo, chama a função copiarArquivo e copia todos os arquivos.
            copiarArquivo(origemDiretorio, destinoDiretorio);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Main m = new Main();
        File dir1 = new File("/home/dir1/");
        File dir2 = new File("/home/dir2/");
        try {
            m.copiarDiretorio(dir1, dir2);
        } catch (IOException ex) {
            System.out.println("Houve um erro ao copiar " + ex);
        }
    }
}

Façam o teste, coloque qualquer arquivo/diretorio acentuado dentro do diretorio /home/dir1/
Façam o teste tanto em windows (onde funciona) e no linux (onde ocorre o erro).

nel

Oi!

Infelizmente não tenho Linux aqui para testar, mas, o Linux está aceitando tu salvar diretório/arquivo com caracteres especiais?
É estranho, pois você simplesmente busca um determinado arquivo. Por curiosidade, tente adicionar um único arquivo e salve ele como UTF-8.

Abraços.

Criado 27 de julho de 2011
Ultima resposta 27 de jul. de 2011
Respostas 3
Participantes 2