Estou desenvolvendo uma classe que realiza a comunicação com o banco de dados, e gostaria de pegar as informações de conexão de um arquivo, porém não estou conseguindo abrir o arquivo e pesquisando no google e até mesmo aqui no forum não encontrei algo que pudesse estar errado… segue o código:
[code]public BancoDados() {
try {
BufferedReader arquivo = new BufferedReader(new FileReader(
new File(“config.ini”)));
String linha;
while(arquivo.ready()){
linha = arquivo.readLine();
if(linha.startsWith("SERVIDOR:"))
setEndServer(linha);
if(linha.startsWith("PORTA:"))
setPorta(linha);
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
}catch (IOException e) {
e.printStackTrace();
}
}[/code]
Porém, acaba dando a exception de FileNotFound… Mesmo o arquivo estando presente no diretório…
Para ler arquivos, utilize a classe Scanner, ela é mais simples.
Além disso, vc usa o Eclipse ou o Netbeans? Cada um procura o arquivo em um diretório padrão diferente. Para não ter dúvidas, coloca o caminho completo do arquivo lá em new FIle.
Mas eu não gostaria de usar o caminho completo na aplicação, pois so Deus sabe onde essa aplicação vai estar… E acabei de testar e continua dando o mesmo erro…
Existe algum método no Java que eu consigo pegar o diretório atual da aplicação? Eu programo em .Net e lá tem um esquema tipo Directory.GetCurrentDirectory(); que me retorna o diretório atual.
Tente não se amarrar a isso (identificar o diretório corrente da aplicação).
Em vez disso, o modo correto de você abrir um arquivo que está junto com sua aplicação (mas dentro do seu jar, por exemplo) é pô-lo em algum lugar do seu classpath, e usar getClass().getResourceAsStream() - há varios exemplos aqui no GUJ.
Mas eu não gostaria de usar o caminho completo na aplicação, pois so Deus sabe onde essa aplicação vai estar… E acabei de testar e continua dando o mesmo erro…
Existe algum método no Java que eu consigo pegar o diretório atual da aplicação? Eu programo em .Net e lá tem um esquema tipo Directory.GetCurrentDirectory(); que me retorna o diretório atual.
Existe isso em Java?
[/quote]
pra vc pegar o nome do diretório vc pode fazer isso:
public BancoDados() {
File arquivo = new File ("config.ini");
try {
FileWriter writer = new FileWriter(arquivo);
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);
String linha;
while(leitor.ready()){
linha = leitor.readLine();
if(linha.startsWith("SERVIDOR:"))
setEndServer(linha);
if(linha.startsWith("PORTA:"))
setPorta(linha);
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
}catch (IOException e) {
e.printStackTrace();
}
}
Tio, se você puder mudar o formato (só um pouquinho) para o formato Properties, vai ver que é muito simples. Basta usar o método load da classe java.util.Properties, não é difícil achar exemplos na Internet.
(Evite reinventar a roda se possível).
O único problema do formato Properties é que o caracter “” deve ser duplicado. (Isso quebrou as pernas de um colega meu).
Por exemplo, se você tinha configurado algo como:
SERVIDOR: \ABC0123
ou
ARQUIVO: c:\documents and settings\joseaparecido\meus documentos\teste.doc
Você precisa trocar por:
SERVIDOR=\\ABC0123
ARQUIVO= c:\documents and settings\joseaparecido\meus documentos\teste.doc
[quote=MaxVenom]Algo estranho para mim um mero iniciante nesta vasta linguagem chamada Java…
Ele ta zerando o arquivo…
Exemplo, o arquivo tem conteudo… eu inicio o programa e apaga todo o conteudo do arquivo! [/quote]
Se você criar um FileWriter sobre um arquivo, ele costuma zerar o arquivo, já que é para você gravar nele, não?
Para atualizar um arquivo texto, não se pode ao mesmo tempo criar um FileWriter e um FileReader para o mesmo arquivo. Você vai ter problemas, como você mesmo constatou. O correto, se é realmente isso que você quer fazer, é ler o arquivo inteiro em memória primeiro, fazer as modificações, e então gravar o arquivo inteiro. Lembre-se que mesmo em C++ não é possível atualizar um arquivo-texto abrindo-o para leitura e escrita ao mesmo tempo.
Vlwwwwwwwwww galera!!! Agora o esquema ta funfundo 100% 8)
Realmente, depois que removi o writer (até mesmo por que nao ia usar) os dados continuaram sendo mantidos no arquivo.
Aos que tiverem a mesma dúvida, segue o código que passei a usar:
[code]try {
File arquivo = new File (“config.ini”);
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);
String linha;
while((linha = leitor.readLine()) != null){
if(linha.startsWith("SERVIDOR:"))
setEndServer(linha);
if(linha.startsWith("PORTA:"))
setPorta(linha);
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
}catch (IOException e) {
JOptionPane.showMessageDialog(null,
"Erro na leitura do arquivo.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
} [/code]
File arquivo = new File ("config.ini");//Nome do arquivo que ira usar
try {
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);
String linha;
while(leitor.ready()){
linha = leitor.readLine();
if(linha.startsWith("SERVIDOR:"))
setEndServer(linha);
if(linha.startsWith("PORTA:"))
setPorta(linha);
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
}catch (IOException e) {
e.printStackTrace();
}
Ae caso queira gravar use o metodo
public static void CriaArquivo(String arquivo, String conteudo){
try{
FileWriter writer = new FileWriter(arquivo);
PrintWriter saida = new PrintWriter(writer);
saida.println(conteudo); //Aqui eh oque ira escrever
saida.close();
writer.close();
}catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null,
"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",
"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
}catch (IOException e) {
e.printStackTrace();
}
Ahh quando postei vc ja tinha postado a solucao demorei muito