Problema com caracteres de escape na criação de arquivo

Olá, estou criando um arquivo através da classe file, o código é o seguinte:

File arquivo = new File ("/home/bruno/Área\ de\ trabalho/Clientes.txt");

O compilador fica acusando erro por causa dos caracteres de escape ( \ \ ) que servem para indicar um espaço no nome do diretório (linux), porém forçando a execução o programa roda sem nenhum problema. Gostaria de saber se há algum outro modo de referenciar um diretório desse tipo, ou então se teria como fazer o compilador ignorar esse “erro”. Agradeço qualquer ajuda.

Você deve passar a responsabilidade para classe System pegar o separador… e tambem seu diretorio de trabalho, veja o exemplo:

[code]package formatacao;

import java.io.File;
import java.io.IOException;

public class TesteSeparator {
public static void main(String[] args) throws IOException {
String home = System.getProperty(“user.home”);
String separator = System.getProperty(“file.separator”);
File arquivo = new File (home+separator+“testePath”+separator+“testecoisa.txt”);
arquivo.createNewFile();
}

}
[/code]

testePath é um diretório dentro da pasta do meu usuário, dentro do diretóiro testePath vai haver um arquivo testecoisa.txt…

Espero ter ajudado.

[quote=ribclauport]Você deve passar a responsabilidade para classe System pegar o separador… e tambem seu diretorio de trabalho, veja o exemplo:

[code]package formatacao;

import java.io.File;
import java.io.IOException;

public class TesteSeparator {
public static void main(String[] args) throws IOException {
String home = System.getProperty(“user.home”);
String separator = System.getProperty(“file.separator”);
File arquivo = new File (home+separator+“testePath”+separator+“testecoisa.txt”);
arquivo.createNewFile();
}

}
[/code]

testePath é um diretório dentro da pasta do meu usuário, dentro do diretóiro testePath vai haver um arquivo testecoisa.txt…

Espero ter ajudado.[/quote]

O file.separator está servindo como substituto para o / que é o separador de arquivos no linux , oque eu preciso é de um substituto para o \ , que separa espaços em branco no nome de uma pasta ou arquivo, não resolveu meu problema mas mesmo assim valeu pela força.

Bom, eu uso windows, mas veja bem para que usar “” para escapar espaço? o nome da sua pasta tem espaço?

eu renomiei minha pasta com espaço, compilei pelo prompt com javac, e correu tudo bem…

[code]package formatacao;

import java.io.File;
import java.io.IOException;

public class TesteSeparator {
public static void main(String[] args) throws IOException {
String home = System.getProperty(“user.home”);
String separator = System.getProperty(“file.separator”);
File arquivo = new File(home + separator + “testePath com espaco”
+ separator + “testecoisa.txt”);
arquivo.createNewFile();
}

}
[/code]

Não entendi o porquê de usar o “” na minha opnião é so usar:

    File arquivo = new File ("/home/bruno/Área de trabalho/Clientes.txt");  

Teste assim e veja se da certo, fiquei curioso agora…

[quote=BrunoRB]Olá, estou criando um arquivo através da classe file, o código é o seguinte:

File arquivo = new File ("/home/bruno/Área\ de\ trabalho/Clientes.txt");

O compilador fica acusando erro por causa dos caracteres de escape ( \ \ ) que servem para indicar um espaço no nome do diretório (linux), porém forçando a execução o programa roda sem nenhum problema. Gostaria de saber se há algum outro modo de referenciar um diretório desse tipo, ou então se teria como fazer o compilador ignorar esse “erro”. Agradeço qualquer ajuda.[/quote]

O nome “de verdade” do arquivo (ou seja, aquele que é usado pelo sistema operacional para abrir o arquivo, não o que você vê na tela) é, em Unix/Linux:

/home/bruno/Área de trabalho/Clientes.txt

Note que você pode, para listar esse arquivo no shell (por exemplo), usar um dos três seguintes comandos:

ls ‘/home/bruno/Área de trabalho/Clientes.txt’
ls “/home/bruno/Área de trabalho/Clientes.txt”
ls /home/bruno/Área\ de\ trabalho/Clientes.txt

Você entendeu para que serve o '\ '? Ele não faz parte do nome do arquivo “em si”. Ele serve para avisar o shell que você não terminou o argumento (normalmente os argumentos são separados por espaços ou tabs, não?) e deseja continuar a digitar o nome.

Quando você cerca o argumento com aspas (simples ou duplas - a interpretação das aspas simples e duplas é um pouco diferente, mas não vou explicar aqui para não lhe confundir), os caracteres como espaços não precisam ser “escapados” porque tudo é considerado como um único argumento, cujo valor é:

/home/bruno/Área de trabalho/Clientes.txt

As regras para o uso das sequências de escape no Java são diferentes das regras do shell (não importa se é o Bourne, C-Shell, Bash ou Korn shell). Uma delas é que não existe "\ " (backslash + space) no Java, só no shell. Para representar um espaço normal não se usa um escape.

No caso do Java, os caracteres de escape são: \r (ASCII CR), \n (ASCII LF), \t (ASCII TAB), \f (ASCII FF), ’ , " , \ e \uXXXX onde XXXX são 4 dígitos hexadecimais que representam um “code point” no Unicode. Notou que não há um "\ "?

Confira em http://docs.oracle.com/javase/tutorial/java/data/characters.html

Saquei. Muito boa a sua explicação, agradeço muito a ajuda, valeu !

Erro meu, imaginava que as regras de acesso a diretórios através de terminal se aplicavam.