14. februar 2003 - 12:14Der er
20 kommentarer og 1 løsning
Fil lægges i relativ sti
Jeg har en fil der gerne skulle lægges i samme directory som den java-fil der benytter den. Problemet er bare, at hvis man skriver filewriter("filnavn.txt") så lægges filen det sted hvor den afvikles fra, hvilket kan være stort set alle steder, hvis man har java.exe i sin path.
Det kunne være skønt hvis jeg kunne finde ud af at placere filen samme sted som java-filen, men uden at bruge en absolut sti, da det jo så ikke vil virke hvis den bliver flyttet fra en mappe til en anden for eksempel.
Der må da være en måde at bruge en relativ sti til det istedet for en absolut.
Har overvejet om det var muligt muligvis via System eller File at finde ud af hvor den fil der bliver afviklet er placeret henne af, og ikke hvor den bliver afviklet fra.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Ok, så får jeg den fulde sti til class.filen. Nu skal jeg så bare have fjernet fil-navnet til sidst. Har prøvet at lægge den ind i en File, og benytte getAbsolutePath, men jeg får hele tiden fil-navnet i slutningen. Nogen måde at fjerne dette på?
ja, men ud fra din metode, får jeg c:\tempdir\javafil.class. Herfra skal jeg jo kun bruge c:\tempdir\ for at bruge det i en filewriter(getPath()+"fil.txt");
Metoden getPath() er en metode, som man ofte vil have glæde af ved oprettelse af filer. Hvordan vil man strikke koden sammen, hvis ikke getPath() hver gang eksplicit skal indgå i den konkrete klasse, hvor man ønsker at anvende den?
Kunne man skrive sin egen File-klasse, som arver fra File-klassen, og som inkluderer getPath()-metoden, således at man benytter denne klasse i stedet for File-klassen, når man opretter FileWriter-objektet?
Ja, og dog, måske skal der lidt mere til (?)..en sådan klasse vil vel stadig skulle trække på informationen fra den klasse, hvorfra den kaldes, og det kræver vel at man opretter et objekt af klassen først, jf. dit eksempel, hvor du opretter et Test-objekt (?)
public class GetPathExt { private static String getPath(Class cls) { String cn = cls.getName(); StringTokenizer st = new StringTokenizer(cn,"."); StringBuffer sb = new StringBuffer(""); boolean first = true; while(st.hasMoreTokens()) { if(first) { first = false; } else { sb.append("/"); } sb.append(st.nextToken()); } sb.append(".class"); String path = GetPath.class.getClassLoader().getSystemResource(sb.toString()).getPath(); int ix = path.indexOf("!"); if(ix >= 0) { path = path.substring(0, ix); int ix2 = path.lastIndexOf("/"); return path.substring(6, ix2 + 1); } else { int ix2 = path.lastIndexOf("/"); return path.substring(1, ix2 + 1); } } }
kan kaldes med:
GetPathExt.getPath(Foobar.class)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.