Java Nio File Newinputstream
π
2026-06-22 | π Java
Java java.nio.file.Files newInputStream() Method | Rookie Tutorial
[ Java java.nio.file.Files](#)
* * *
The `newInputStream()` method is used to open a file and return an input stream for reading data from that file. This is a more modern file operation approach provided by Java NIO, offering better performance and richer functionality compared to the traditional `FileInputStream`.
### Method Definition
public static InputStream newInputStream(Path path, OpenOption... options)
throws IOException
### Parameter Description
1. `Path path` - The path object of the file to be opened
2. `OpenOption... options` - Optional parameters specifying how the file should be opened
### Return Value
Returns a new `InputStream` object that can be used to read data from the file
### Exceptions
* `IOException` - If an I/O error occurs while opening the file
* `SecurityException` - If a security manager exists and denies access to the file
* * *
## Basic Usage
### Example 1: Simplest File Reading
## Example
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesExample {
public static void main(String[] args){
Path path = Paths.get("example.txt");
try(InputStream inputStream = Files.newInputStream(path)){
int data;
while((data = inputStream.read())!=-1){
System.out.print((char) data);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
In this example, we:
1. Create a `Path` object pointing to the file to be read
2. Use the `Files.newInputStream()` method to obtain an input stream
3. Use try-with-resources statement to ensure the stream is automatically closed
4. Read the file content byte by byte and print it
* * *
## Advanced Usage
### Using OpenOption Parameters
The `OpenOption` interface allows us to specify how the file should be opened. The commonly used implementation class is `StandardOpenOption`, which provides the following options:
* `READ` - Open file for reading (default)
* `WRITE` - Open file for writing
* `APPEND` - Open file for appending
* `TRUNCATE_EXISTING` - Truncate the file if it already exists
* `CREATE` - Create a new file if it doesn't exist
* `CREATE_NEW` - Create a new file, fail if the file already exists
* `DELETE_ON_CLOSE` - Delete the file when the stream is closed
* `SPARSE` - Hint to the file system to create a sparse file
* `SYNC` - Require every update to be synchronously written to storage
* `DSYNC` - Require every update to be synchronously written to storage (content only)
#### Example 2: Specifying Open Options
## Example
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class FilesExampleWithOptions {
public static void main(String[] args){
Path path = Paths.get("example.txt");
try(InputStream inputStream = Files.newInputStream(path,
StandardOpenOption.READ,
StandardOpenOption.DSYNC)){
// Read file content...
}catch(IOException e){
e.printStackTrace();
}
}
}
* * *
## Comparison with Traditional FileInputStream
### Advantages
1. **More Modern API**: Based on the `Path` interface, integrates better with other parts of NIO
2. **More Flexible**: Can specify various opening methods through `OpenOption`
3. **Better Performance**: In some cases performs better than `FileInputStream`
4. **Clearer Exception Handling**: Throws more specific exception types
### Disadvantages
1. **Java 7+**: Requires Java 7 or higher
2. **Learning Curve**: Requires adaptation for developers familiar with traditional I/O
* * *
## Best Practices
1. **Always use try-with-resources**: Ensure the input stream is properly closed
2. **Use buffering for large files**: Consider wrapping in `BufferedInputStream` for better performance
3. **Check if file exists**: Use `Files.exists(path)` before attempting to open
4. **Handle exceptions**: Properly handle possible `IOException`
#### Example 3: Best Practice Example
## Example
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesBestPractice {
public static void main(String[] args){
Path path = Paths.get("largefile.dat");
if(!Files.exists(path)){
System.err.println("File does not exist: "+ path);
return;
}
try(InputStream rawStream = Files.newInputStream(path);
BufferedInputStream bufferedStream =new BufferedInputStream(rawStream)){
byte[] buffer =new byte;
int bytesRead;
while((bytesRead = bufferedStream.read(buffer))!=-1){
// Process the read data...
}
}catch(IOException e){
System.err.println("Error reading file: "+ e.getMessage());
}
}
}
* * *
## Summary
`Files.newInputStream()` is a powerful and flexible file reading tool in Java NIO, offering more functionality and better performance compared to the traditional `FileInputStream`. By reasonably using `OpenOption` parameters and following best practices, you can write efficient and reliable file reading code.
[ Java java.nio.file.Files](#)