Come funzionano i percorsi dei file relativi in ​​Eclipse?

Quindi la mia risoluzione del 2009 è di imparare Java. Recentemente ho acquisito “Java for Dummies” e ho seguito il codice demo nel libro riscrivendolo utilizzando Eclipse. Ad ogni modo, ogni esempio nel libro che usa un percorso relativo non sembra leggere il file .txt da cui dovrebbe leggere.

Ecco il codice di esempio:

import java.util.Scanner; import java.io.File; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JLabel; import java.awt.GridLayout; class TeamFrame extends JFrame { public TeamFrame() throws IOException { PlayerPlus player; Scanner myScanner = new Scanner(new File("Hankees.txt")); for (int num = 1; num <= 9; num++) { player = new PlayerPlus(myScanner.nextLine(), myScanner.nextDouble()); myScanner.nextLine(); addPlayerInfo(player); } add(new JLabel()); add(new JLabel(" ------")); add(new JLabel("Team Batting Aberage:")); add(new JLabel(PlayerPlus.findTeamAverageString())); setTitle("The Hankees"); setLayout(new GridLayout(11,2)); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); setVisible(true); } void addPlayerInfo(PlayerPlus player) { add(new JLabel(player.getName())); add(new JLabel(player.getAverageString())); } } 

E puoi vedere nella schermata qui sotto che ho incluso questo file.

immagine non più disponibile

Inoltre, ho verificato che quando costruisco l’applicazione una copia di Hankees.txt viene inserita nella cartella bin con i file .class compilati.

    Infine, se cambio la riga 12 al seguente e posto Hankees.txt nella radice del mio C: \ drive il programma si compila e gira bene.

     Scanner myScanner = new Scanner(new File("C:\\Hankees.txt")); 

    Quindi, in pratica, la mia domanda è: cosa sto sbagliando? Oppure Eclipse è responsabile di questo in qualche modo?

    Grazie per qualsiasi aiuto!

    Hai bisogno di "src/Hankees.txt"

    Il tuo file si trova nella cartella di origine che non è conteggiato come directory di lavoro. \

    Oppure puoi spostare il file nella directory principale del tuo progetto e utilizzare semplicemente "Hankees.txt"

    Il percorso di creazione di un progetto definisce quali risorse dalle cartelle di origine vengono copiate nelle cartelle di output. Di solito questo è impostato su Includi tutti i file.

    Le nuove configurazioni di esecuzione hanno come impostazione predefinita l’utilizzo della directory di progetto per la directory di lavoro, anche se può essere modificata.

    Questo codice mostra la differenza tra la directory di lavoro e la posizione in cui è stata caricata la class da:

     public class TellMeMyWorkingDirectory { public static void main(String[] args) { System.out.println(new java.io.File("").getAbsolutePath()); System.out.println(TellMeMyWorkingDirectory.class.getClassLoader().getResource("").getPath()); } } 

    L’output è probabilmente qualcosa di simile:

     C:\your\project\directory /C:/your/project/directory/bin/ 

    Questo è veramente simile ad un’altra domanda. Come devo caricare i file nella mia applicazione Java?

    Come devo caricare i miei file nella mia applicazione Java?

    Non vuoi caricare i tuoi file in:

     C:\your\project\file.txt 

    questo è male!

    Dovresti usare getResourceAsStream.

     InputStream inputStream = YourClass.class.getResourceAsStream(“file.txt”); 

    E inoltre dovresti usare File.separator ; che è il carattere nome-separatore dipendente dal sistema, rappresentato come stringa per comodità.

    Sì, eclipse vede la directory principale come directory di lavoro / root, ai fini dei percorsi.

    … ho pensato di aggiungere qualche informazione in più. Sono nuovo qui! Mi piacerebbe aiutare

    Parafrasando da http://java.sun.com/javase/6/docs/api/java/io/File.html :

    Le classi sotto java.io risolvono i percorsi relativi relativi alla directory utente corrente, che di solito è la directory in cui è stata avviata la macchina virtuale.

    Eclipse imposta la directory di lavoro nella cartella di progetto principale.

    ho lo stesso problema Se YourClass e Hankees.txt hanno una directory nel tuo progetto, trovo che segue – non così male.

     import java.net.URL; //<...> URL url = YourClass.class.getClassLoader().getResource("Hankees.txt"); String filesPathAndName = url.getPath(); Scanner myScanner = new Scanner(new File(filesPathAndName)) //<...> 

    Puoi sempre ottenere il tuo percorso di runtime usando:

      String path = new File(".").getCanonicalPath(); 

    Questo fornisce preziose informazioni su dove mettere file e risorse.