Table of Contents
- Java File Input and Output:
- Path Operations:
- File Operations:
Java File Input and Output:
A file is identified by its path through the file system, beginning from the root node.
A symbolic link is a special file that serves as a reference to another file. when a symbolic link is deleted, or renamed then link itself is deleted, or renamed and not the target of the link.
A Path object contains the file name and directory list used to construct the path, and is used to examine, locate, and manipulate files.
Methods in the Files class are useful to check the existence of the file corresponding to the Path, create the file, open it, delete it, change its permissions, and so on.
A Path can be created by calling static get() method on Paths (plural) helper class.
Path p1 = Paths.get(“/home/work/sample”) ; Path p2 = Paths.get(URI.create(“file:///home/temp/var”));
Paths.get() method is a short hand for below method call on FileSystems helper class.
Path p3 = FileSystems.getDefault().getPath(“/opt/test/sample”);
Below are a few important useful methods on Path object.
p1.toString() ? /home/work/sample p1.getFileName() ? sample (Returns file name or last element of path) p2.getName(0) ? home (Returns 0th element in path) p2.getNameCount() ? 3 (Total no of name elements in path) p3.getSubpath(0,2) ? /opt/test p3.getParent() ? /opt/test (Returns parent directory path) p3.getRoot() ? /
- The normalize method removes any redundant elements, which includes any “.” or “directory/..” occurrences.
Path p4 = Paths.get(“/home/sample/../var/one”) ; p4.normalize() ? /home/sample/var/one
- Convert path to URI, that can be opened from a browser. p1.toUri() ? file:///home/work/sample
The toAbsolutePath() method converts a path to an absolute path.
The toRealPath() method returns the real path of an existing file. This method performs several operations in one:
- If true is passed to this method and the file system supports symbolic links, this method resolves any symbolic links in the path.
- If the Path is relative, it returns an absolute path.
- If the Path contains any redundant elements, it returns a path with those elements removed.
- Combine paths by using the resolve() method.
p1.resolve(“bar/one”) ? /home/work/sample/bar/one
The Path class supports equals, to test two paths for equality. The startsWith and endsWith methods are also available to test whether a path begins or ends with a particular string.
Path start = Paths.get(“/home”) ; Path end = Paths.get(“var”) ; if (p1.startsWith(start)) ? returns true if (p2.endsWith(end)) ? returns true
Files class provides rich set of static methods for reading, writing, and manipulating files and directories.
- Files.createFile(path) – Creates empty file
- Files.exists(Path) – Checks whether a file exists at given path.
- Files.notExists(Path) – Checks whether a file doesn’t exist at given path.
- Files.isReadable(Path) – Checks whether file is readable.
- Files.isWritable(Path) – Checks whether file is writable.
- Files.isExecutable(Path) – Checks whether file is executable.
- Files.isSameFile(Path, Path) – Compares two paths to see if they locate the same file.
- Files.delete(Path) – Deletes a file or dir at given path.
- Files.deleteIfExists(Path) – Deletes a file, but if the file doesn’t exist, no exception is thrown.
- Files.copy(Path1, Path2, REPLACE_EXISTING) – Copies files from path1 to path2.
- Files.move(Path1, Path2, REPLACE_EXISTING) – Moves files from path1 to path2.
- Files.size(Path) – Returns the size of the specified file in bytes.
- Files.isDirectory(Path, LinkOption) – Checks whether given file is a directory.
- Files.isRegularFile(Path, LinkOption…)
- Files.isSymbolicLink(Path) – Returns true if specified Path is a symbolic link.
- Files.getLastModifiedTime(Path, LinkOption…)
- Files.setLastModifiedTime(Path, FileTime)
- Files.getOwner(Path, LinkOption…)
- Files.setOwner(Path, UserPrincipal)
Creating Symbolic Links:
Path newLlink = …; Path target = …; Files.createSymbolicLink(newLink, target);
Creating a Hard Link:
Hard (or regular) link to an existing file.
Path newLink = …; Path existingFile = …; Files.createLink(newLink, existingFile);
Reading all bytes or lines from a file:
byte fileArray = Files.readAllBytes(Path)
Writing all bytes or lines to a file:
byte buf = …; Files.write(file, buf);
Reading a File by Using Buffered Stream I/O:
Charset charset = Charset.forName(“US-ASCII”); BufferedReader reader = Files.newBufferedReader(path, charset) ; String line = null; while ((line = reader.readLine()) != null) System.out.println(line);
Writing a File by Using Buffered Stream I/O:
String s = …; BufferedWriter writer = Files.newBufferedWriter(path, charset); writer.write(s, 0, s.length());
Reading a File by Using Stream I/O:
InputStream in = Files.newInputStream(path) ; BufferedReader reader = new BufferedReader(new InputStreamReader(in))
Creating and Writing a File by Using Stream I/O:
String s = …; byte  data = s.getBytes(); OutputStream out = new BufferedOutputStream(Files.newOutputStream(CREATE, APPEND)) ; out.write(data, 0, data.length);
Note: All methods that access the file system can throw an IOException.