Java i.o Windows e Linux

Ola pessoal, estou aqui para tirar uma duvida com vocês. Estou usando a API Java.io para criar diretórios e arquivos, só que estou na duvida se vai rodar no linux.

Usei algo mais ou menos assim para criar no windows:

File arquivo = new File("C:/Forum/Guj/Java/");

:?: Agora fiquei na duvida, por que pelo o que notei o linux usa barra invertida “”. Sendo o Java multiplataforma ele ira tratar isso para mim :?: ou seja esse mesmo programa que roda no windows vai rodar no linux :?:

OBS: Vou ter que colocar no lugar do “C”, “Sistemas de arquivos” para poder rodar no linux.

Não apenas a barra vai ter que mudar.
Em linux não existe também o disco C:, e alguns outros detalhes.
Uma sugestão é usar um caminho relativo e montar o endereço utilizando o separador de pastas padrão do sistema em que o software está rodando.
Para obter o separador, faça:

String separator = System.getProperty("file.separator");

:oops: Desculpa minha ignorancia, mas naum entendi, para que serve esse código?
Eu queria saber se existe uma forma de não precisar mudar essas barras, por que são muitos os diretórios e arquivos que tenho que criar.

Se possivel, precisaria de um exemplo que esteja mais perto da minha realidade.

Se eu tiver que mudar todo o codigo, entaum, pode -se dizer que para este caso o Java não é multiplataforma, pois, vou ter que criar uma versão Windows e outra linux. :x

Ele pega do sistema em que o código for rodado, o separado entre arquivos, exemplo:

No Windows é a barra /

C:/Teste/Guj/Java

No Mac suponha que seja *

CtesteGUJ*Java

entendeu?

[quote=raphaelFree] :oops: Desculpa minha ignorancia, mas naum entendi, para que serve esse código?
Eu queria saber se existe uma forma de não precisar mudar essas barras, por que são muitos os diretórios e arquivos que tenho que criar.

Se possivel, precisaria de um exemplo que esteja mais perto da minha realidade.

Se eu tiver que mudar todo o codigo, entaum, pode -se dizer que para este caso o Java não é multiplataforma, pois, vou ter que criar uma versão Windows e outra linux. :x

[/quote]

Vc não precisará mudar as barras. Essa variável separator usa a barra do SO em que seu sistema estiver rodando. Se for no windows o valo de separator será “” e se for no linux ao contrário. Basta concatenar a string do cominho com a variável separator. Ex.:

String separator = System.getProperty("file.separator");  
String caminhoArquivo = "C:" + separator + "Forum";
File arquivo = new File(caminhoArquivo);  

A idéia era utilizar o separador de pastas padrão do sistema operacional em que o aplicativo está rodando. À partir daí, pode ser montado o caminho no qual os arquivos serão gravados.
Ao invés de criar um caminho fixo (no exemplo “C:/Forum/Guj/Java/”), você criaria um caminho que seria montado utilizando o separador. Por exemplo.

String separator = System.getProperty("file.separator");  
StringBuilder builder = new StringBuilder();
builder.append("Forum");
builder.append(separator);
builder.append("Guj");
builder.append(separator);
builder.append("Java");
builder.append(separator);

Desta forma, o caminho vai ser montado conforme a plataforma em que está rodando.

Este é só um exemplo grosseiro, mas a idéia seria essa.

Vlw,muito obrigado. Viva o Java :smiley:

Entendi. No entanto, existe outro problema, e quanto ao nome do Volume ? windows “C” e linux “sistemas de arquivos”, de qualquer forma vou ter que criar uma versão para cada SO.

Pensei em renomear o “sistemas de arquivos” do linux para “C”, mas é inviável, por imagina a cada instalação do produto ter que ficar renomeado a unidade de disco. Sei lá, será que naum existe uma forma, ou metódo de buscar o nome do volume ?

OBS: :shock: to ficando loko…hehehehe

[quote=raphaelFree]Vlw,muito obrigado. Viva o Java :smiley:

Entendi. No entanto, existe outro problema, e quanto ao nome do Volume ? windows “C” e linux “sistemas de arquivos”, de qualquer forma vou ter que criar uma versão para cada SO.

Pensei em renomear o “sistemas de arquivos” do linux para “C”, mas é inviável, por imagina a cada instalação do produto ter que ficar renomeado a unidade de disco. Sei lá, será que naum existe uma forma, ou metódo de buscar o nome do volume ?

OBS: :shock: to ficando loko…hehehehe[/quote]

O método “listRoots()” da classe “File” retorna os “arquivos” que representariam os níveis hierárquicos mais altos do sistema de arquivos da plataforma onde a JVM está rodando.
A partir daí o resto é com você mesmo.

Inté.

No Linux não existe drive C, D etc. Existe apenas um sistema de arquivos ("/") e onde os programas devem ser instalados depende do seu tipo de Linux.

No caso do Mac OS X, o esquema é bem parecido com o do Linux (o separador de nomes de arquivos também é “/”); onde os programas devem ser instalados é num outro lugar bem padronizado, mas não é no mesmo lugar do Linux.

Ambos não têm o conceito de “drives” (C:, D: etc.). Isso é um vestígio do CP/M, onde o drive A: era o primeiro floppy e o B: o segundo floppy, e os poucos felizardos que tinham HD podiam usar o drive C: . Como o HD era muito caro, era muito raro ver drive D: ou coisas parecidas.

Então, estou googleando, achei algo como montar um outro disco no linux com nome por exemplo de “C”.
E ai pessoal o que vocês acham?
Sei lá criar uns scripsts, e executa - los na hora da instalação, assim desta forma eu teria: “Sistemas de arquivos” e “C”.
Não sei se estou pensando certo.
Por que se esta forma estiver certo, entao, nao preciso mudar o codigo java, deixando versões iguais para os 2 SO.

bom, sou novato em java. estava dando uma olhada nas dicas e utilizo algo parecido.

tenho um aplicação que roda tento em linux quando windows e o caminho que coloco é “/” para qualquer um deles.

o java e multiplataforma, então funciona em qualquer um.
sei o topico e antigo, mas quem sabe ajuda algum “andarilho” como eu :slight_smile: .
t+

Qual é a sua dúvida? o que você precisa fazer?

não é duvida, é so pra ajudar outras pessoas que tambem estão procurando.
esse metodo serve tanto prala linux quando para windows. assim como o mkdir.

Esse é garantido que funciona em qualquer plataforma.

    String separator = System.getProperty("file.separator");    
    String caminhoArquivo = "C:" + separator + "Forum";  
    File arquivo = new File(caminhoArquivo);