- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.ByteBuffer;
- import java.nio.channels.Channel;
- import java.nio.channels.FileChannel;
- import java.nio.charset.Charset;
- public class FileChannelMain {
- private static final Charset charset = Charset.forName("GBK");
- private static final int BUFFER_CAPACITY = 1024;
- public static void main(String[] args) throws IOException, InterruptedException {
- final String srcfilePath = "D:/tomcat-6.0.26/logs/catalina.2012-04-30.log";
- readFile(srcfilePath);
- final String writeFilePath = "D:/test.txt";
- final String[] lines = new String[]{"line1xxssss", "中文测试", "!@#$%^&*()"};
- writeFile(writeFilePath, lines, Boolean.TRUE);
- readFile(writeFilePath);
- final String targetFilePath = "D:/test-copy.txt";
- copyFile1(srcfilePath, targetFilePath);
- copyFile2(srcfilePath, targetFilePath);
- }
- /**
- *
- * <br>------------------------------<br>
- * @param srcfilePath
- * @param targetPath
- * @throws IOException
- */
- private static void copyFile2(String srcfilePath, String targetPath) throws IOException {
- File file = new File(targetPath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileInputStream fileInputStream = new FileInputStream(srcfilePath);
- FileOutputStream fileOutputStream = new FileOutputStream(file);
- FileChannel inChannel = fileInputStream.getChannel();
- FileChannel outChannel = fileOutputStream.getChannel();
- //两者等价
- // inChannel.transferTo(0, inChannel.size(), outChannel);
- outChannel.transferFrom(inChannel, 0, inChannel.size());
- close(fileOutputStream);
- close(fileInputStream);
- close(inChannel);
- close(outChannel);
- }
- /**
- *
- * <br>------------------------------<br>
- * @param srcfilePath
- * @param targetPath
- * @throws IOException
- */
- private static void copyFile1(String srcfilePath, String targetPath) throws IOException {
- File file = new File(targetPath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileInputStream fileInputStream = new FileInputStream(srcfilePath);
- FileOutputStream fileOutputStream = new FileOutputStream(file);
- FileChannel inChannel = fileInputStream.getChannel();
- FileChannel outChannel = fileOutputStream.getChannel();
- ByteBuffer inBuffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- while (inChannel.read(inBuffer) != -1) {
- inBuffer.flip();
- outChannel.write(inBuffer);
- inBuffer.clear();
- }
- close(fileOutputStream);
- close(fileInputStream);
- close(inChannel);
- close(outChannel);
- }
- /**
- * <br>------------------------------<br>
- * @param writeFilePath
- * @param lines
- * @param append
- * @throws IOException
- */
- private static void writeFile(String writeFilePath, String[] lines, boolean append) throws IOException {
- File file = new File(writeFilePath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileOutputStream fileOutputStream = new FileOutputStream(file, append);
- FileChannel fileChannel = fileOutputStream.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- for (String line : lines) {
- buffer.put(line.getBytes());
- buffer.put("\r\n".getBytes());
- buffer.flip();
- fileChannel.write(buffer);
- buffer.clear();
- }
- close(fileOutputStream);
- close(fileChannel);
- }
- /**
- * <br>------------------------------<br>
- * @param path
- * @throws IOException
- */
- private static void readFile(String path) throws IOException {
- if (isFileNotExists(path)) {
- throw new FileNotFoundException();
- }
- FileInputStream fileInputStream = new FileInputStream(path);
- FileChannel fileChanne = fileInputStream.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- while (fileChanne.read(buffer) != -1) {
- buffer.flip();
- System.out.println(charset.decode(buffer));
- buffer.clear();
- }
- close(fileInputStream);
- close(fileChanne);
- }
- private static boolean isFileNotExists(String path) {
- File file = new File(path);
- return !file.exists();
- }
- /**
- *
- * <br>------------------------------<br>
- * @param outputStream
- */
- private static void close(OutputStream outputStream) {
- if (outputStream == null) return;
- try {
- outputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- *
- * <br>------------------------------<br>
- * @param channel
- */
- private static void close(Channel channel) {
- if (channel == null ) return;
- try {
- channel.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- *
- * <br>------------------------------<br>
- * @param inputStream
- */
- private static void close(InputStream inputStream) {
- if (inputStream == null) return;
- try {
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
NIO - FileChannel
最新推荐文章于 2024-10-27 15:49:02 发布