Sobes.tech
Junior

What is a symbolic link?

sobes.tech AI

Answer from AI

A symbolic link (symbolic link or symlink) is a special type of file in an operating system that points to another file or directory. It acts as a shortcut.

Key features:

  • Contains a path: A symbolic link contains a text string — the path to the target file or directory. When accessed, the system follows this path.
  • Contains no data: The link itself does not contain data of the target file. The size of the link is usually small and depends on the length of the path.
  • Independence from partition: The target file or directory can be on a different disk partition or even a different filesystem than the link itself.
  • Broken links: If the target file or directory is deleted, the symbolic link becomes "broken" or "dangling," but the link itself continues to exist.
  • Support: Supported by most modern operating systems (Linux, macOS, Windows with NTFS).

Comparison with a hard link:

Criterion Symbolic link Hard link
File type A separate file type An additional link to inode
Path Stores the path to the target Does not store the path
Partition/FS Can point to another partition/FS Must be on the same partition/FS
Deletion of target Link becomes broken Data remains accessible through other links
On directories Can point to directories Usually cannot point to directories

In Java, working with symbolic links is done through the java.nio.file API.

// Example of creating a symbolic link
import java.io.IOException;
import java.nio.file.*;

public class SymlinkExample {

    public static void main(String[] args) {
        Path target = Paths.get("target_file.txt"); // Target file
        Path link = Paths.get("mylink_to_target"); // Name of the symbolic link

        try {
            // Create the target file (for example)
            Files.write(target, "Hello, World!".getBytes());

            // Create a symbolic link
            Files.createSymbolicLink(link, target);
            System.out.println("Symbolic link created: " + link.toAbsolutePath());

            // Check if the path is a symbolic link
            System.out.println(link.getFileName() + " is a symbolic link: " + Files.isSymbolicLink(link));

            // Read content through the link
            byte[] content = Files.readAllBytes(link);
            System.out.println("Content through the link: " + new String(content));

            // Resolve the link to get the path to the target file
             Path resolvedTarget = Files.readSymbolicLink(link);
             System.out.println("Target path of the link: " + resolvedTarget);

        } catch (IOException e) {
            e.printStackTrace();
         } finally {
             // Delete created files for cleanup
             try {
                 Files.deleteIfExists(link);
                 Files.deleteIfExists(target);
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
    }
}
What is a symbolic link? — Java - sobes.tech