Verificando se arquivo existe [RESOLVIDO]

Boa tarde, estou com o seguinte problema…
Toda vez que eu tento verificar se algum arquivo existe ele retorna que não existe (Mesmo existindo).
Fiz uma função para ver se o arquivo existe, ele verifica em dois diretórios caso seja (x32 ou x64).

Eu inserindo os diretórios manualmente em alguns programas funciona… (isso que é estranho, eu acho que é algum tipo de permissão).

Exemplo:
verificaPrograma(“Steam”,“‪C:\Program Files\Steam\Steam.exe”,“‪C:\Program Files (x86)\Steam\Steam.exe”);

Mas, eu queria utilizar por exemplo a variável de ambiente do windows como: %ProgramFiles% | %ProgramFiles(x86)% | %username% | que iria “Automatizar”, caso eu buscasse por um usuário.

Exemplo:
%homedrive%\Users%username%\

verifica1Programa(“Discord”,"%homedrive%\Users\%username%\AppData\Local\Discord\app-0.0.301\Discord.exe");

nesse caso acima só possuí esse tipo de diretório, então faço uma função pra buscar somente 1 diretório, e passo essas variáveis de ambiente para que possa executar o programa em qualquer computador windows.

public void verificaPrograma(String nomePrograma, String diretorioPrograma1, String diretorioPrograma2){

    File programaT1 = new File(diretorioPrograma1);
    File programaT2 = new File(diretorioPrograma2);
    
    if(!programaT2.exists()){ // se não existir arquivo avança para o outro if
        if(!programaT1.exists()){ // se não existir arquivo instala programa
            instalaPrograma(nomePrograma);   
        }else{//se arquivo existir 
            JOptionPane.showMessageDialog(null,"O Software já foi instalado =D");
        }
    }

Código para a função instalar:

public void instalaPrograma(String nomePrograma){
try {
java.awt.Desktop.getDesktop().open( new File( “resources/”+nomePrograma+".exe"));//pasta dentro do projeto do netBeans
} catch (IOException ex) {
JOptionPane.showMessageDialog(null,“O software não foi localizado.”);
Logger.getLogger(Tela.class.getName()).log(Level.SEVERE, null, ex);
}
}

Desde já, agradeço!!!

Coloque duas barras invertidas \\ ou então /
Exemplo:

new File(“C:\\diretorio\\outro\\PastaX\\outrooo\\arquivo.exe”);

new File(“C:/diretorio/outro/PastaX/outrooo/arquivo.exe”);

1 curtida

Obrigado pela resposta, porém eu já havia colocado.
Mesmo assim continua dando o erro.

Para obter o valor de variáveis de ambiente, utilize o método System.getenv.

1 curtida

Muito obrigado meu amigo, agora só falta entender o que está ocasionando o erro de existência de arquivo.

Coloca essas duas linhas para ver se o caminho está correto:

System.out.println("\"" + programaT1.getAbsolutePath() + "\"");
System.out.println("\"" + programaT2.getAbsolutePath() + "\"");
1 curtida

Muitíssimo obrigado meu amigo, Funcionou perfeitamente!!!
como não estou em casa, vou postar um exemplo que fiz rápido.

Exemplo:

package verifarq;
import javax.swing.*;
import java.awt. *;
import java.awt.event. *;
import java.io.File;
public class verificador extends JFrame implements ActionListener {
private JButton btnOk;

public verificador(){
    super("Verificar");
    setSize(180,65);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
    btnOk = new JButton("Verificar");
    btnOk.addActionListener(this);
    c.add(btnOk);
    setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae){
    if(btnOk == ae.getSource()){
        verif(System.getenv("ProgramFiles(x86)")+"\\K-Lite Codec Pack\\Media Player Classic\\mpc-hc.exe");
    }
}

public void verif(String diretorio){
    File dir = new File(diretorio);
    System.out.println(dir.getAbsolutePath());
    
    if(dir.getAbsoluteFile().exists()){
        System.out.println("O item existe");
    }else{
        System.out.println("O Item não existe");
    }
}}

Classe principal:

package verifarq;
public class VerifArq {
public static void main(String[] args) {
new verificador();
}
}

Para a galera que está com o mesmo problema que presenciei. :v: