Last active
March 28, 2022 23:17
-
-
Save quiet-node/401b9cf6a79f9e55e13f7f45e560a77e to your computer and use it in GitHub Desktop.
NIOWriteToDisk.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package yelp.dataset.oswego.yelpbackend.services; | |
import java.io.BufferedOutputStream; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.nio.ByteBuffer; | |
import java.nio.channels.FileChannel; | |
import lombok.NoArgsConstructor; | |
import yelp.dataset.oswego.yelpbackend.algorithms.btree.BusinessBtree; | |
@NoArgsConstructor | |
public class IOUtil { | |
private final String fileDest = "YOUR PATH TO FILE"; | |
protected void writeFileWithFileChannel(BusinessBtree businessBtree) throws IOException { | |
// Get the file | |
FileOutputStream fout = new FileOutputStream(fileDest); | |
// Register FileChannel to operate read and write | |
FileChannel wChannel = fout.getChannel(); | |
// Register ByteBuffer to store message inside a buffer | |
ByteBuffer wBuffer = ByteBuffer.allocate(1024); | |
String message = "Writing on disk"; | |
wBuffer.put(message.getBytes()); | |
/* | |
ByteBuffer::flip() is used to flip BB from "reading from I/O"(put) to "writing to I/O"(get) after a sequence of put | |
ByteBuffer::flip() will set the limit of the buffer to current position and reset the position to 0 | |
*/ | |
wBuffer.flip(); | |
// Acctually write to file from buffer | |
wChannel.write(wBuffer); | |
System.out.println("Success!"); | |
} | |
protected void readRootWithFileChannel(BusinessBtree businessBtree) throws IOException { | |
// Get the file | |
RandomAccessFile raf = new RandomAccessFile(bTreeRoot, "rw"); | |
// Register FileChannel to operate read and write | |
FileChannel fChannel = raf.getChannel(); | |
// Allocaate bufferSize | |
int bufferSize = 1024; | |
if (bufferSize > fChannel.size()) { | |
bufferSize = (int) fChannel.size(); | |
} | |
// Register ByteBuffer to store message inside a buffer | |
ByteBuffer buff = ByteBuffer.allocate(bufferSize); | |
// Read the file to buffer | |
fChannel.read(buff); | |
// Flip the buffer | |
buff.flip(); | |
System.out.println("Reading from buffer = " +new String(buff.array())); | |
} | |
protected void readRootWithPath(BusinessBtree businessBtree) throws IOException { | |
Path path = Paths.get(bTreeRoot); | |
List<String> read = Files.readAllLines(path); | |
System.out.println("Files.readAllLines(path) = " + read); | |
Stream<String> lines = Files.lines(path); | |
String data = lines.collect(Collectors.joining(" + ")); | |
lines.close(); | |
System.out.println("Files.lines(path) = " +data); | |
} | |
public class WriteExample { | |
public static void main(String... args) throws IOException { | |
Path path = Files.createTempFile("test-file", ".txt"); | |
Files.write(path, "some test content...".getBytes()); | |
byte[] bytes = Files.readAllBytes(path); | |
System.out.println(new String(bytes)); | |
} | |
} | |
public class WriteIterable { | |
public static void main(String... args) throws IOException { | |
Path path = Files.createTempFile("test-file", ".txt"); | |
Iterable<String> iterable = Arrays.asList("line1", "line2"); | |
Files.write(path, iterable); | |
byte[] bytes = Files.readAllBytes(path); | |
System.out.println(new String(bytes)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment