Files in Java NIO
November 28, 2013
java.nio.file.Files has been introduced in Java 7. Files deals with directory and files. It can create and delete directory as well as files. It also creates link between the existing files and link directory. Files contain static methods to perform the task. Here we will give the examples of some important methods of Files.
Example of Files.newBufferedReader in java.nio.file API
java.nio.file.Files provides static methods that reads and writes the files and directories. Files.newBufferedReader opens the text files to read. newBufferedReader() method returns BufferedReader that reads the file. The method signature isnewBufferedReader(Path p, Charset ch)
NewBufferedReaderExample.java
package com.concretepage.io.file; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class NewBufferedReaderExample { public static void main(String[] args) throws IOException { //Get the instance of Path Path path = Paths.get("c:/temp","test.txt"); //opens the file to read BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8); String s = null; while((s=reader.readLine())!=null){ System.out.println(s); } } }
Example of Files.copy in java.nio.file API
Files.copy copies the data form one file to another file. Files.copy has different constructors that accept different type of parameters. Files.copy accepts Path as source and OutputStream as destination. Files.copy also accepts parameter InputStream as source file and Path as destination file and it also accepts Path as source and destination file both with java.nio.file.StandardCopyOption. Find the example.CopyExample.java
package com.concretepage.io.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; public class CopyExample { public static void main(String[] args) throws IOException { //Get the instance of Path of Source File Path pathSource = Paths.get("c:/cp","test.txt"); // Using Path and OutputStream with Files.copy //get the File to be written File destFile = new File("c:/temp/newTest1.txt"); FileOutputStream fos = new FileOutputStream(destFile); //copy a file to destination file and returns no of bytes written long noOfBytes = Files.copy(pathSource, fos); System.out.println(noOfBytes); //Using InputStream and Path with Files.copy File sourceFile = new File("c:/cp/test.txt"); FileInputStream fis = new FileInputStream(sourceFile); Path destPath1 = Paths.get("c:/temp","newTest2.txt"); noOfBytes = Files.copy(fis,destPath1,StandardCopyOption.REPLACE_EXISTING); System.out.println(noOfBytes); //Using Path for source and destination of file with Files.copy Path destPath2 = Paths.get("c:/temp","newTest3.txt"); Path target = Files.copy(pathSource,destPath2,StandardCopyOption.REPLACE_EXISTING); System.out.println(target.getFileName()); } }
1. copy(Path source, OutputStream out)
We are passing Path instance and OutputStream and here file is written from Path source file to destination file by OutputStream.
2. copy(InputStream in, Path target, CopyOption... options)
Here we are copying one file to another file by passing InputStream as source file and Path as destination file. StandardCopyOption.REPLACE_EXISTING overwrites if file already exists.
3. copy(Path source, Path target, CopyOption... options)
Here source and destination both are as Path instance.
Create Directory and Temp Directory Using java.nio.file.Files
java.nio.file.Files has the methods that creates directory and temp directory as required. Directory can be created by passing Path arguments and FileAttribute. FileAttribute is optinal. Because posix is not permitted in Windows. Find the different methods and their usability.Files.createDirectories() in java.nio.file.Files
createDirectories(Path dir, FileAttribute<?>... attributes) supports creating parent as well as child directories. It does not throw exception if file already exists.Files.createDirectory() in java.nio.file.Files
Files.createDirectory(Path dir, FileAttribute<?>... attributes) only creates the last child directory and does not create parent directory. It throws exception if child already exists.Files.createTempDirectory()in java.nio.file.Files
Files.createTempDirectory(String prefix, FileAttribute<?>... attributes) creates temp directory with given prefix in the default temp directory of File system. Files.createTempDirectory(Path dir, String prefix, FileAttribute<?>... attributes) creates the temp directory in specified Path. Find the example to create directory and temp directory using java.nio.file.Files.CreateDirectoryExample.java
package com.concretepage.io.file; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.Set; public class CreateDirectoryExample { public static void main(String[] args) throws IOException { Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwx--x"); FileAttribute<Set<PosixFilePermission>> fileAttributes = PosixFilePermissions.asFileAttribute(perms); Path path = Paths.get("D:", "Parent","Child"); //This line of code will not work in Windows OS //Files.createDirectories(path,fileAttributes); //creates Directory as Directory as D:\Parent\Child Files.createDirectories(path); Path path1 = Paths.get("D:", "Parent","Child1"); //creates Directory as Directory Child1 under as D:\Parent Files.createDirectory(path1); //creates temp directory in file system temp directory Files.createTempDirectory("Concretepage"); //creates temp directory in the specified path Files.createTempDirectory(path,"Concretepage"); } }
Example of Files.createFile(path) and Files.createTempFile(String prefix, String suffix)
Files.createFile creates a file in the specified Path. If file already exits, it throws exception. Files.createTempFile creates a temp file in the default directory of the file system.CreateFileExample.java
package com.concretepage.io.file; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.Calendar; import java.util.Set; public class CreateFileExample { public static void main(String[] args) throws IOException { Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwx--x"); FileAttribute<Set<PosixFilePermission>> fileAttributes = PosixFilePermissions.asFileAttribute(perms); Path path = Paths.get("d:", "cp","file.txt"); // will not work on windows //Files.createFile(path, fileAttributes); //creates a file Files.createFile(path); //Create temp file in default location File.createTempFile("concretepage", String.valueOf(Calendar.getInstance().getTime().getTime())); } }
Example of Files.createLink(Path link, Path existing) and Files.createSymbolicLink(Path link, Path target)
Files.createLink creates a link for a file which will locate to other directory. In Files.createSymbolicLink, target Path may not exist and creates a symbolic link for the given link Path.CreateLinkExample.java
package com.concretepage.io.file; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class CreateLinkExample { public static void main(String[] args) throws IOException { Path existing = Paths.get("d:", "cp","file.txt"); Path link = Paths.get("d:", "link"); Path linkSym = Paths.get("d:", "linkSym"); Files.createLink(link, existing); Files.createSymbolicLink(linkSym, existing); } }