java - Sådan specificeres stien til adgang til en fil i både Windows og Linux unikt ved hjælp af skråstreg seperator

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en applikation skrevet i java, hvor der fremad skråstreges for at angive fil- og mappebanen. Filen og mappen kan få adgang, når programmet kører på linux. Men når det kører på vinduer, står der en fejl, at den angivne sti er forkert. Sådan specificeres stien til filen entydigt.


I java iam bruger du denne kommando:


public static final String WD ="/qark-master/qark/qarkMain.py";
public static final String MANIFESTPATH="/apktool/AndroidManifest.xml";


Hjælp mig venligst her!

Bedste reference


Som nævnt af Jim Garrison fungerer fremadrettet skråstreg i både Windows og Unix.
Problemet er med drevbogstav eller rodmappe. Når det er en Windows-sti, der er defineret fra root som /qark-master, er det en rodmappe af det aktuelle drev.
Men ... brug absolut vej i koden enten i Windows med drevbogstav eller fra root i Linux er ikke en god idé. Meget bedre er at bruge relativ sti enten fra den nuværende kørende mappe eller specielle miljøvariabler.
Derefter kan du bruge fremad skråstreg og er ligeglad med stilseparator.


Fra andre hænder - der er en systemegenskab i JVM kaldet 'file.separator', og det er muligt at konstruere en sti med den i henhold til OS. Selvfølgelig er der alligevel problemer med absolutte stier med drevbogstav til Windows.

Andre referencer 1


Mens Java gerne vil bruge skråstreger i både Windows og Linux, gør kravet om et præstation for drevbogstav i Windows det umuligt at bruge de samme absolutte stier i begge systemer.


Hvad du skal gøre, er at bruge en egenskabsfil til at konfigurere OS-afhængige parametre, f.eks. Filplaceringer, og have en anden version af egenskabsfilen på hvert system.


Bemærk, at det er meget dårligt at hardkodes eksterne ressourcereferencer (dvs. filstier) i din Java-kode. Relative referencer er OK, men de skal være i forhold til en baseplacering, der leveres ved runtime og ikke kompileres til den eksekverbare.

Andre referencer 2


Du skal undslippe tegn til flugtsekvenser. Flere detaljer her - Escape Characters [6]


I Windows skal du definere en escape karakter for fil sepeator med backslash - som nedenfor.



    String filePath = "C:\Users\b21677\DFS.docx";



I Linux skal du definere som det er



     public static final String WD ="/qark-master/qark/qarkMain.py";


Andre referencer 3


Dette virker fint, da jeg brugte file.separator.


public static final String QWD = File.separator +"qark-master" + File.separator +"qark" + File.separator +"qarkMain.py";
public static final String MANIFESTPATH=File.separator +"apktool"+ File.separator +"AndroidManifest.xml";