what is the difference b/w abstract pathname and pathname string. I came across these two when i was reading about string separator
It depends on the system into which you ran your JVM. For instance, Windows and Linux need different slash separator (forward/backward). It's the separatorChar Value in File Class. The Abstract PathName is independant from the system. This pathname is used internaly by The File Class. @see File constructor doc
What is the difference b/w abstract pathname and pathname string?
An abstract pathname is basically a regular path name represented in a OS-independent way, while a pathname string is simply a (possibly system-dependent) string representing a path name.
The documentation for File elaborates a bit on this:
An abstract pathname has two components:
An optional system-dependent prefix string, such as a disk-drive specifier, "/" for the UNIX root directory, or "\" for a Microsoft Windows UNC pathname, and
A sequence of zero or more string names.
For example, the abstract version of the pathname string
"/home/aioobe/tmp/test.txt"
consists of these two parts:
- A prefix:
"/"
- A list of string names
"home"
,"aioobe"
,"tmp"
,"test.txt"
Pathname strings are used to name files and directories in various operating systems. They vary from OS to OS. For example, in Linux it is: /home/user/a.java
and in Windows it: c:\dev\a.java
So, when it's said that a pathname string is converted to abstract pathname, that means that the pathname string is now independent of the OS.
For example:
File path = File("/home/user/a.java")
Converts the linux dependent file path to a JVM understandable file path (path
object in above example), which is called Abstract path name.
I guess you have been reading this, but the best way to understand this is to implement a simple 5line java code and see what options with you get with the File class.
An abstract pathname has two components:
- An optional system-dependent prefix string, such as a disk-drive specifier, "/" for the UNIX root directory, or "\\" for a Microsoft Windows UNC pathname, and
- A sequence of zero or more string names.
This is how Java internally represents a path to a resources in a OS independent manner.
A path name is the readable representation of that abstraction and is also what you could type into your OS terminal to reach that file, ie.
c:\blah\blah.txt
Beware that on *nix back slash (\) is valid character in a file name but not on windows.
Run this on windows and *nix and compare printouts:
File f1 = new File("c:\\somepath\\somefile.txt");
System.out.println(f1.getName());
File f2 = new File("c:/somepath/somefile.txt");
System.out.println(f2.getName());
On windows both variants prints somefile.txt
but on *nix the first variant prints
c:\somepath\somefile.txt
second variant prints somefile.txt
So using / is "safer" to use. (Found this when uploading a file from a windows client to a Solaris server and trying to extract just the file name.)