Excluir classes com java.io

16 respostas
R

Ola pessoal, dei uma procurada aqui no forum e naum axei o que eu queria. Dei uma buscada no google e axei algo que poderia dar certo se eu fizesse uma modificações. Tenho uma lista na frame onde adiciono valores(Estes valores são os os nomes das classes.java). Então quando eu pressionar o botão remove precisaria que exclui-se a classe no package explorer do eclipse. Tentei criar algo com o java.io , mas naum deu muito certo.

ModelLista novoTeste = new ModelLista(Banco , Driver , URL , Usuario , Senha , Schema , Cache , Read);


// tentei pegar a lista. O Banco representa o que foi digitado na tela, peguei a classe pelo nome 
File arq = new File(novoTeste.getBanco().getClass().getName());
					String path = arq.getAbsolutePath();
					
					if(arq.exists()){
						if(arq.delete()){
							System.out.println("Arquivo deletado " + path);
					}
				}

16 Respostas

K

Você chegou a depurar para ver se o arquivo existe? Talvez o nome do arquivo esteja sendo montado errado.

Primeiro é necessário que você quebre a cabeça e depure bem o código antes de postar aqui. Outra coisa, se der diferente de arq.exists() não acontece nada? Nenhuma mensagem? Talvez isso já mostrasse o que está acontecendo.

Por último, as vezes o arq.delete() pode não funcionar, bastando que você abra um stream pro arquivo e depois feche, para que ocorra um desbloqueio no sistema operacional, e então podendo ser chamado o delete novamente, geralmente funcionando. Tive este problema com Java 1.4 e 1.5 em Unix algum tempo atrás.

[]sssss

F

pode ser q vc tbm não tenha essa permissão na pasta para deletar…

R

Eu to quebrando a cabeça por isso eu postei aki, por que essa foi minha ultima e fracassada tentativa. Ele me emite uma mensagem dizendo que foi excluida o arquivo, no entanto o arquivo continua aparecendo no package explorer mesmo depois de eu atualizar o projeto. Mas quanto a esse stream eu vou correr atraz para ver o que eu acho sobre isso.

F

mas peraí…

vc está deletando o ,java né…

pq se deletar o .class no re-building vai criar again…

F

mas peraí…

vc está deletando o ,java né…

pq se deletar o .class no re-building vai criar again…

R

??? to tentando deletar um classe.java que contem o mesmo nome de um elemento que esta dentro de um array.
Ou seja , tenho minha list na tela, certo? ela tem o nome de forumGUJ, desta forma minha classe.java tambem tem esse nome de forum.GUJ, então quando remover da list este nome, tenho que apagar o .java. Até agora só consigo remover o que esta na list, porém tentei criar esse metodo acima para remover a classe tambem, mas naum deu certo.

F

pode ser que que suas .class não estejam no mesmo diretório e sim em WebContent/WEB-INF/classes ou algo parecido

isso é setado no projeto…

R

Focão… procurando pelo o que o japa falou ai em cima , eu achei outra coisa e eu fiz assim, e consegui apagar quase todos os elementos. Quase, isso pq a ultima classe que esta na lista naum apaga, pq?

// passando a localizacao do arquivo. Pois todos  as classes.java ficarao neste diretorio
					File arq = new File("C:/FDDK/runtime-EclipseApplication/Extrator/src/" +
							FreeDecisionWizardPage2.getCliente()  + "/" + FreeDecisionWizardPage2.getFabricante() +
							"/" + FreeDecisionWizardPage2.getProduto() + '/' + "shared/" + "dbs/" 
							+ FreeDecisionWizardPage3.banco + ".java" ); 	
					if (arq.exists())
						arq.delete();
F

faz um teste aí

if (arq.canRead()){
arq.delete();  
}else{
//só pra ver se cai aki
arq.deleteOnExit();
}
R

Não caiu, pior que ficou na mesma, se eu criar 3 classes é excluida apenas 2.

F

kd a lista FreeDecisionWizardPage2?

manda aí…

essa lista tem o cara ?

tem algum for? while ? interator ?

R

FreeDecisionwizardpage2 naum é uma lista e sim uma classe que contem atributos que formam o caminho do diretório. To postando o método inteiro o que exclui da lista e o que exclui .java.

public void handleEvent(Event event) {
				// se tentar remover da lista enquanto estiver vazia mostra mensagem
				if (lista.getItemCount()  == 0){     
					JOptionPane.showMessageDialog(null,"Selecione uma conexão para remover","Atenção" ,JOptionPane.WARNING_MESSAGE); 
					txtBanco.setFocus();
					System.out.println("Selecione uma Conexão para Remover");

				}else{ 
					//pegando o item da lista e removendo dos campos txt
					int itemSelect = lista.getSelectionIndex();    
					ModelLista teste = array.get(itemSelect);  

					String Banco = txtBanco.getText();
					String Driver = comboDriver.getText();
					String URL = comboURL.getText();
					String Usuario = txtUsuario.getText();
					String Senha = txtSenha.getText();
					String Schema = txtSchema.getText();
					String Cache = txtCache.getText();
					String Read = comboRead.getText();
					
					// chamando metodo
					ModelLista novoTeste = new ModelLista(Banco , Driver , URL , Usuario , Senha , Schema , Cache , Read); 				
					// removendo item da lista
					lista.remove(novoTeste.getBanco());
					array.remove(itemSelect);
					
					
					// passando a localizacao do arquivo para poder exclui-lo
					File arq = new File("C:/FDDK/runtime-EclipseApplication/Extrator/src/" +
							FreeDecisionWizardPage2.getCliente()  + "/" + FreeDecisionWizardPage2.getFabricante() +
							"/" + FreeDecisionWizardPage2.getProduto() + '/' + "shared/" + "dbs/" 
							+ FreeDecisionWizardPage3.banco + ".java" ); 	
					//if (arq.exists())
						//arq.delete();
						
					    if (arq.canRead()){  
						    arq.delete();    
						    }else{   
						    arq.deleteOnExit();  
						    }
F

pq tem 2 ModelLista ?

vc não poderia deletar o .java depois remover o cara da lista ?

R

Pelo o que é proposto eu preciso remover o “.java” juntamente com o elemento da lista.

R

Será que ninguém tem uma sugestão, ja que o problema continua :oops:

R

Ja que ninguem respondeu, eu mesmo vou responder.

// chamando metodo
					ModelLista novoTeste = new ModelLista(Banco , Driver , URL , Usuario , Senha , Schema , Cache , Read); 				
					// removendo item da lista
					lista.remove(novoTeste.getBanco());
					array.remove(itemSelect);
					
					 //pegando o nome da classe 
					setBanco(txtBanco.getText());
					// passando a localizacao do arquivo.
                                                       File arq = new File("C:/FDDK/runtime-EclipseApplication/Extrator/src/" +
							FreeDecisionWizardPage2.getCliente()  + "/" + FreeDecisionWizardPage2.getFabricante() +
							"/" + FreeDecisionWizardPage2.getProduto() + '/' + "shared/" + "dbs/" 
							+ FreeDecisionWizardPage3.banco + ".java" ); 	
					
						//deletando do arquivo
					if (arq.canRead()){  
						    arq.delete();    
						    }else{   
						    arq.deleteOnExit();  
						    }
Criado 18 de novembro de 2008
Ultima resposta 20 de nov. de 2008
Respostas 16
Participantes 3