Delicate or Exhausting Hyperlink?
A tough hyperlink is extra restrictive, and sometimes resolves most of the points associated to comfortable hyperlinks. Nonetheless, due to these restrictions, they’re typically used much less usually than comfortable hyperlinks.
Exhausting hyperlinks have the next restrictions:
- The goal of the hyperlink should exist
- The goal can’t be a listing
- The goal should exist on the identical partition or quantity
And, in case you are questioning distinction between arduous hyperlink and comfortable hyperlink, here’s a good diagram which clearly explains the distinction between arduous hyperlink and comfortable hyperlink. In case of arduous hyperlink, it straight level to the information within the disc whereas comfortable hyperlink factors to the file object.
Java Program to create Exhausting and Delicate utilizing Recordsdata and Path with Instance
Right here is our full Java Program to create hyperlinks in Java utilizing Recordsdata and Path class or Java NIO Pacakge. This program will work fantastic after JDK 7 onwards as a result of this characteristic was launched in Java NIO on Java 7.
Earlier than working this Java program, right here is how my file system was trying like :
javin@workstation2 ~/Check
$ ls -lrt
whole 13666
----------+ 1 javin None 4056 Feb 17 15:54 information.txt
javin@workstation2 /cygdrive/d/JavaWorkspace/Check
$ ln -s information.txt link_data.txt
javin@workstation2 /cygdrive/d/JavaWorkspace/Check
$ ls -lrt
whole 13666
----------+ 1 javin None 4056 Feb 17 15:54 information.txt
lrwxrwxrwx 1 javin None 8 Feb 24 18:41 link_data.txt -> information.txt
And, now let’s examine this system and output to grasp it higher:
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Recordsdata;
import java.nio.file.Path;
public class Testing {
public static void essential(String args[]) {
Path information = FileSystems.getDefault().getPath("~/check/information.txt");
boolean isSoftLink = Recordsdata.isSymbolicLink(information);
System.out.printf("Does Path : %s is a comfortable hyperlink? %b %n", information, isSoftLink);
Path hyperlink = FileSystems.getDefault().getPath("~/check/link_data.txt");
boolean isLink = Recordsdata.isSymbolicLink(hyperlink);
System.out.printf("Does Path : %s is a comfortable hyperlink? %b %n", hyperlink, isLink);
Path hardLink = FileSystems.getDefault()
.getPath("D:/Eclipse_workspace/Check/hardlink.txt");
Path goal = FileSystems.getDefault()
.getPath("D:/Eclipse_workspace/Check/information.txt");
attempt {
Path newlink = Recordsdata.createLink(hardLink, goal);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output:
Does Path : ~testdata.txt is a comfortable hyperlink? false
Does Path : ~testlink_data.txt is a comfortable hyperlink? false
Issues to notice about Hyperlinks and Recordsdata in Home windows
1) Home windows does not assist comfortable hyperlinks, however arduous hyperlink is supported by Home windows
2) The Java 7 Path and Recordsdata courses work with each comfortable (symbolic) and arduous hyperlinks.
3) to find out if a Path is a symbolic hyperlink, you cross it to the Recordsdata.isSymbolicLink() methodology
In any of those examples, if the underlying OS doesn’t assist symbolic and/or arduous hyperlinks, or in case you violate one of many restrictions of arduous hyperlinks, you’ll get an IOException at runtime. Due to this fact, be able to deal with this case gracefully in your code.
Diving deeper into Java SE 7’s File IO APIs, you need to use the FileVisitor interface to find out if and the way hyperlinks are adopted, when to keep away from them (i.e. when deleting information), and detect if a round reference exists.
By the best way, if arduous hyperlink already exists then it should throw following exception
java.nio.file.FileAlreadyExistsException: D:temphardlink.txt -> D:tempdata.txt
at solar.nio.fs.WindowsException
.translateToIOException(WindowsException.java:81)
at solar.nio.fs.WindowsException
.rethrowAsIOException(WindowsException.java:97)
at solar.nio.fs.WindowsFileSystemProvider
.createLink(WindowsFileSystemProvider.java:600)
at java.nio.file.Recordsdata.createLink(Recordsdata.java:1037)
To create a symbolic hyperlink (not supported on Home windows), you utilize the Recordsdata.createSymbolicLink() methodology, and cross two Path objects. The primary represents the hyperlink to be created, and the second is the trail to the precise goal file or listing:
Path softlink = FileSystems.getDefault().getPath("~/new.txt");
Path goal = FileSystems.getDefault().getPath("~/outdated.txt");
Recordsdata.createSymbolicLink(hyperlink, goal);
That is all about easy methods to create arduous and comfortable hyperlink utilizing Recordsdata class in Java. This is among the fascinating characteristic of Java API and I believe each Java Programmer ought to understand it. Recordsdata is anyway a really helpful and important class and it’s best to study it as a part of your Java studying journey.
Different Java IO tutorials from Javarevisited Weblog
Thanks for studying this Java file IO tutorial in case you like this tutorial then please share with your folks and colleagues. When you have any questions or doubt please ask in feedback.