`

IO、文件、NIO 最佳阅读资料与实践

    博客分类:
  • Java
阅读更多
转载:IO、文件、NIO【草案一】
http://blog.csdn.net/silentbalanceyh/archive/2010/01/25/5252265.aspx

转载:IO、文件、NIO【草案二】
http://blog.csdn.net/silentbalanceyh/archive/2010/01/25/5252280.aspx

转载:IO、文件、NIO【草案三】
http://blog.csdn.net/silentbalanceyh/archive/2010/01/26/5252285.aspx

转载:IO、文件、NIO【草案四】
http://blog.csdn.net/silentbalanceyh/archive/2010/01/25/5252301.aspx

作者写得太详细了,太好了 以及相关的,一,二,三,是了解IO,NIO最好的参考资料,
为了方便面在不能上网的时候阅读,就下载了,见附件

实战代码(文件拷贝)

import java.io.File;
import java.io.FileInputStream;

import java.io.FileOutputStream;
import java.io.IOException;

import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class ReadWriteCompare {

	public static void main(String[] args) throws IOException {
		
		copyFileToNio("c:/dev.rar","c:/copy_dev.rar");
	}

	public static void copyFileToNio(String sourceFilePath, String newFilePath)
			throws IOException {
		  File file = new File(sourceFilePath);
		  if(!file.exists()){
			  System.err.println("要拷贝的源文件不存在,请重新指定文件路径.");
			  return;
		  }
		  createMkdirs(newFilePath);
		  copyFileToNio(file,newFilePath);
	}
	
	public static void createMkdirs(String filePath) throws IOException{
		int dirIndex = filePath.indexOf("/");
		int dirIndex2 = filePath.indexOf("\\");
		if(dirIndex == -1 && dirIndex2 == -1){
			System.err.println("文件路径非法...");
			return;
		}			
		int lastIndex = filePath.lastIndexOf("/");		
		String dirs = filePath.substring(0,lastIndex);		
		File file = new File(dirs);
		if(file.exists()){
			System.err.println("文件路径不用创建..."+dirs);
			return;
		}
		
		if(file.mkdirs()){
			System.out.println("文件目录创建成功..." + dirs);
		}else{
			System.out.println("文件目录创建失败..." + dirs);
		}
		file = new File(filePath);
		if(!file.exists()){
			file.createNewFile();
			System.out.println("文件目录及文件成功..." + filePath);
		}else{
			System.out.println("文件目录及文件已经存在");
		}
		
		
	}

	private static void copyFileToNio(File sourceFile, String newFilePath)
			throws IOException {
		 long timeStar = System.currentTimeMillis();//得到当前的时间
		FileInputStream fileInputStream = new FileInputStream(sourceFile);
		FileOutputStream fileOutputStream = new FileOutputStream(newFilePath);
		FileChannel inChannel = fileInputStream.getChannel();
		FileChannel outChannel = fileOutputStream.getChannel();		
		ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024);
		while (true) {
			int eof = inChannel.read(byteBuffer);
			if (eof == -1)
				break;
			byteBuffer.flip();
			outChannel.write(byteBuffer);
			byteBuffer.clear();
		}
		inChannel.close();
		outChannel.close();
		if(new File(newFilePath).exists()){
			System.out.println("文件创建成功!");
		}else{
			System.out.println("文件创建失败!");
		}
	  long timeEnd = System.currentTimeMillis();//得到当前的时间
      System.out.println("Read time :" + (timeEnd - timeStar) + "ms");
		
	}

}

最新参考资料
JAVA NIO 简介 http://alicsd.iteye.com/blog/834447
引用以上链接:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class CopyFile {   
    public static void main(String[] args) throws Exception {   
        String infile = "C:\\copy.sql";   
        String outfile = "C:\\copy.txt";   
        // 获取源文件和目标文件的输入输出流   
        FileInputStream fin = new FileInputStream(infile);   
        FileOutputStream fout = new FileOutputStream(outfile);   
        // 获取输入输出通道   
        FileChannel fcin = fin.getChannel();   
        FileChannel fcout = fout.getChannel();   
        // 创建缓冲区   
        ByteBuffer buffer = ByteBuffer.allocate(1024);   
        while (true) {   
            // clear方法重设缓冲区,使它可以接受读入的数据   
            buffer.clear();   
            // 从输入通道中将数据读到缓冲区   
            int r = fcin.read(buffer);   
            // read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1   
            if (r == -1) {   
                break;   
            }   
            // flip方法让缓冲区可以将新读入的数据写入另一个通道   
            buffer.flip();   
            // 从输出通道中将数据写入缓冲区   
            fcout.write(buffer);   
        }   
    }   
}
 

import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.net.InetSocketAddress;
import java.io.IOException;

public class BaiduReader {
	
	private Charset charset = Charset.forName("GBK");// 创建GBK字符集
	private SocketChannel channel;

	public void readHTMLContent() {
		try {
			InetSocketAddress socketAddress = new InetSocketAddress(
					"www.baidu.com", 80);
			// step1:打开连接
			channel = SocketChannel.open(socketAddress);
			// step2:发送请求,使用GBK编码
			channel.write(charset.encode("GET " + "/ HTTP/1.1" + "\r\n\r\n"));
			// step3:读取数据
			ByteBuffer buffer = ByteBuffer.allocate(1024);// 创建1024字节的缓冲
			while (channel.read(buffer) != -1) {
				buffer.flip();// flip方法在读缓冲区字节操作之前调用。
				System.out.println(charset.decode(buffer));
				// 使用Charset.decode方法将字节转换为字符串
				buffer.clear();// 清空缓冲
			}
		} catch (IOException e) {
			System.err.println(e.toString());
		} finally {
			if (channel != null) {
				try {
					channel.close();
				} catch (IOException e) {
				}
			}
		}
	}

	public static void main(String[] args) {
		new BaiduReader().readHTMLContent();
	}
}
分享到:
评论

相关推荐

    IO文件操作eclipse项目(java)

    10. **文件操作的最佳实践** - 总是使用异常处理 - 避免在循环中创建新的流对象,尽量使用缓冲 - 使用完文件后立即关闭流 - 对于大型文件,考虑使用流而不是一次性加载到内存 - 使用相对路径而不是绝对路径,以...

    NIO相关代码和文档资料

    Java NIO(Non-blocking Input/Output)是一种在Java中实现高效I/O操作的机制,它提供了与传统IO(基于BufferedInputStream和BufferedOutputStream)不同的编程模型。NIO的核心概念包括通道(Channels)、缓冲区...

    Large-File-Processing-master_javanio_java大文件处理_

    综上所述,“Large-File-Processing-master_javanio_java大文件处理_”项目涵盖了Java NIO在大文件处理中的核心技术和最佳实践,是学习和研究Java高效处理大文件的宝贵资源。通过深入理解这些知识点,并结合项目中的...

    mongodb的开发和nio实现

    MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在开发过程中,MongoDB常用于存储非...在实际项目中,可以根据具体需求选择合适的设计模式和最佳实践,以优化系统的性能和稳定性。

    Java IO系统资料

    他可能就Java IO进行了深入讲解,包括最佳实践、常见问题及解决方法。 "那个水的例子"可能是一个具体的代码示例,用于解释如何使用Java IO来模拟或处理与水相关的数据流动问题。这种例子通常是为了让抽象的IO概念变...

    IO流宝典.pdf

    总的来说,《IO流宝典》这本书将涵盖这些核心概念,并可能深入讲解IO流的高级特性和最佳实践,包括错误处理、性能优化、以及如何在实际项目中有效地使用Java IO流。对于任何希望提升Java I/O技能的开发者来说,这...

    深入理解Java7核心技术与最佳实践

    《深入理解Java7核心技术与最佳实践》一书深入剖析了Java 7这一版本中的关键技术和最佳实践,旨在帮助开发者全面提升对Java平台的理解和应用能力。Java 7是Java发展历程中的重要里程碑,它引入了许多创新特性,提升...

    Java IO 使用例

    Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许开发者在程序...实践是掌握Java IO的最佳方式,通过对这些示例的分析和运行,可以加深对Java IO机制的理解。

    JavaNio视频下载_百度云盘资源

    1. **官方文档**:Oracle官网提供了详尽的Java NIO API文档,这是了解Java NIO最佳实践的第一手资料。 2. **在线课程**:如Coursera、Udemy等平台上提供的Java NIO专题课程,通常由经验丰富的讲师授课,适合不同程度...

    java网络编程NIO视频教程

    ### Java网络编程NIO视频教程知识点汇总 #### 1. Java NIO-课程简介 - **主要内容**:简述...通过以上内容的学习,开发者可以全面掌握Java NIO编程的相关技术和最佳实践,为开发高性能网络应用程序打下坚实的基础。

    《深入理解Java 7 核心技术与最佳实践》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于Java 7 的书籍——《深入理解Java 7 核心技术与最佳实践》,并且提供了该书PDF版本的下载链接。接下来,我们将围绕这一主题展开讨论,主要从以下几个方面进行深入...

    commons-io-2.1

    通过阅读源代码,开发者可以深入理解库的工作原理,学习最佳实践,并可能根据自己的需求对其进行扩展或修改。源代码通常遵循良好的编程风格,包含了详细的注释,有助于理解和学习。 在帮助文档中,通常会包含API...

    Java面试资料-高清完整PDF版(集合、IO、多线程、反射前端知识、框架).rar

    这个PDF资料将详细讲解这些领域的知识,包括常见面试题、最佳实践和陷阱,帮助求职者准备面试。无论你是初学者还是有经验的开发者,这份资料都将为你的知识体系增添深度和广度,提升你在面试中的竞争力。记得深入...

    java io流学习笔记1

    Java IO流是Java平台中用于处理输入输出的重要组成部分,它为数据在不同设备间传输提供了高效、灵活的方式。...同时,持续关注Java的新特性和最佳实践,比如Java NIO,将有助于你保持技术的领先性。

    安卓SD卡文件管理更新信息相关-自定义文件管理器.rar

    在安卓系统中,文件管理是用户与设备交互的...在实际使用中,开发者应当注意遵循Android的开发最佳实践,确保应用的稳定性和兼容性。同时,对于用户隐私和数据安全,也需要遵守相关法规,防止不当访问或泄露用户数据。

    基于java的文件分割器源码

    在IT行业中,文件处理是日常任务之一,尤其是在大数据和存储管理领域。Java作为一种广泛使用的编程语言,提供了丰富的库和...同时,这也是一个很好的学习实践,帮助开发者深入理解Java I/O机制和文件处理的最佳实践。

Global site tag (gtag.js) - Google Analytics