Cum se definește o cale relativă în java (Programare, Java, Cale Relativă, Jdk1.6)

ishk a intrebat.

Iată structura proiectului meu:

Trebuie să citesc config.properties în interiorul MyClass.java.am încercat să fac acest lucru cu o cale relativă după cum urmează :

// Code called from MyClass.java
File f1 = new File("..\..\..\config.properties");  
String path = f1.getPath(); 
prop.load(new FileInputStream(path));

Acest lucru îmi dă următoarea eroare :

......config.properties (The system cannot find the file specified)

Cum pot defini o cale relativă în Java? Folosesc jdk 1.6 și lucrez pe Windows.

Comentarii

  • Aceasta este o cale relativă validă în Windows .. dar nu ești acolo unde te legi. (Sugestie, este relativă de la directorul de lucru curent și nu de la fișierul sursă). – user166390
  • Ar trebui să păstrați config.properties sub src. Creați config pachet sub src, păstrați config.properties sub config pachet. Și accesați-l pur și simplu ca config/config.properties. –  > Por Nandkumar Tekale.
  • Va config.properties fi distribuit cu Jar? Dacă da, devine o resursă încorporată care nu este accesibilă prin Fileci trebuie să fie accesată prin URL. –  > Por Andrew Thompson.
  • da, se distribuie împreună cu fișierul jar –  > Por ishk.
7 răspunsuri
VinayVeluri

Încercați ceva de genul acesta

String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");

Deci, noul dvs. fișier indică calea în care este creat, de obicei, dosarul de pornire al proiectului dvs.

[EDITARE]

Așa cum a spus @cmc,

    String basePath = new File("").getAbsolutePath();
    System.out.println(basePath);

    String path = new File("src/main/resources/conf.properties")
                                                           .getAbsolutePath();
    System.out.println(path);

Ambele dau aceeași valoare.

Comentarii

  • Nu ar fi mai bine să folosiți new File(„/path/to/file”).getAbsolutePath()? În acest fel, intrarea poate lua atât relativă, cât și absolută, iar ieșirea va fi întotdeauna absolută. –  > Por cmc.
  • @cmc care este valoarea „path/to/file” ? –  > Por VinayVeluri.
  • aceeași ca și „calea către fișierul de proprietate”. –  > Por cmc.
  • @cmc Adevărat.!!! Mi-am actualizat răspunsul pentru a încorpora același lucru. –  > Por VinayVeluri.
  • Când creați File("") în acest mod, parametrul ar trebui să fie calea către fișierul din proiect, în loc de "". –  > Por IgorGanapolsky.
hoapham

În primul rând, vedeți diferența dintre calea absolută și calea relativă aici:

O cale absolută conține întotdeauna elementul rădăcină și lista completă de directoare necesară pentru a localiza fișierul.

În mod alternativ, o cale relativă trebuie combinată cu o altă cale pentru a accesa un fișier.

În constructorul File(String pathname), clasa File din Javadoc spune că

Un nume de cale, fie că este abstract sau sub formă de șir de caractere, poate fi fie absolut, fie relativ.

Dacă doriți să obțineți calea relativă, trebuie să fiți definit calea de la directorul de lucru curent la fișier sau director. încercați să utilizați proprietățile sistemului pentru a obține acest lucru.Ca și imaginile pe care le-ați desenat:

String localDir = System.getProperty("user.dir");
File file = new File(localDir + "\config.properties");

În plus, ar trebui să încercați să evitați să utilizați „..”, „../”, „/” și alte similare relative la calea relativă a locației fișierului, deoarece atunci când fișierele sunt mutate, este mai greu de gestionat.

Abin Manathoor Devasia
 File f1 = new File("..\..\..\config.properties");  

această cale de accesare a fișierului încearcă să acceseze fișierul este în directorul Project, atunci doar accesați fișierul astfel.

File f=new File("filename.txt");

dacă fișierul se află în OtherSources/Resources

this.getClass().getClassLoader().getResource("relative path");//-> relative path from resources folder

Comentarii

  • cum scriu calea relativă aici? –  > Por ishk.
  • @ishk nu știu dacă java suportă accesul relativ prin intermediul pachetelor, putem accesa fișiere din directorul proiectului, așa cum am spus mai sus, și putem accesa și subfolderele.de exemplu File f=new File(„folder/filename.txt”); – –  > Por Abin Manathoor Devasia.
Danon

Merită să menționăm că în unele cazuri

File myFolder = new File("directory"); 

nu indică spre elementele rădăcină. De exemplu, atunci când plasați aplicația dvs. pe C: unitate (C:myApp.jar), atunci myFolder indică (windows)

C:UsersUSERNAMEdirectory

în loc de

C:Directory

yahitesh
 public static void main(String[] args) {
        Properties prop = new Properties();
        InputStream input = null;
        try {
            File f=new File("config.properties");
            input = new FileInputStream(f.getPath());
            prop.load(input);
            System.out.println(prop.getProperty("name"));
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

De asemenea, puteți utiliza
Path path1 =FileSystems.getDefault().getPath(System.getProperty(„user.home”)), „downloads”, „somefile.txt”);

Chris Liston

Aveam probleme în ceea ce privește atașarea capturilor de ecran la ExtentReports folosind o cale relativă la fișierul meu de imagine. Directorul meu curent la execuție este „C:Eclipse 64-biteclipseworkspaceSeleniumPractic”. În cadrul acestuia, am creat folderul ExtentReports atât pentru raportul.html, cât și pentru captura de ecran image.png, după cum urmează.

private String className = getClass().getName();
private String outputFolder = "ExtentReports
;
private String outputFile = className  + ".html";
ExtentReports report;
ExtentTest test;

@BeforeMethod
    //  initialise report variables
    report = new ExtentReports(outputFolder + outputFile);
    test = report.startTest(className);
    // more setup code

@Test
    // test method code with log statements

@AfterMethod
    // takeScreenShot returns the relative path and filename for the image
    String imgFilename = GenericMethods.takeScreenShot(driver,outputFolder);
    String imagePath = test.addScreenCapture(imgFilename);
    test.log(LogStatus.FAIL, "Added image to report", imagePath);

Acest lucru creează raportul și imaginea în folderul ExtentReports, dar atunci când raportul este deschis și imaginea (goală) este inspectată, când se trece peste src-ul imaginii apare „Could not load the image” src=”.ExtentReportsQXKmoVZMW7.png”.

Acest lucru se rezolvă prin prefixarea căii relative și a numelui de fișier pentru imagine cu proprietatea de sistem „user.dir”. Deci, acest lucru funcționează perfect și imaginea apare în raportul html.

Chris

String imgFilename = GenericMethods.takeScreenShot(driver,System.getProperty("user.dir") + "
 + outputFolder);
String imagePath = test.addScreenCapture(imgFilename);
test.log(LogStatus.FAIL, "Added image to report", imagePath);

Kirill Ch

Exemplu pentru Spring Boot. Fișierul meu WSDL se află în Resurse în folderul „wsdl”. Calea către fișierul WSDL este:

resurse/wsdl/WebServiceFile.wsdl

Pentru a obține calea de la o metodă la acest fișier, puteți face următoarele:

String pathToWsdl = this.getClass().getClassLoader().
                    getResource("wsdl\WebServiceFile.wsdl").toString();