加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

IO和NIO

发布时间:2020-12-14 06:25:42 所属栏目:Java 来源:网络整理
导读:一、文件的概念以及文件基本函数的操作 ? ? ? 1. 什么是文件:文件可认为是相关记录或放在一起的数据的集合? ? ? 2. File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容。? ? ? 3. File类定义了一些与平台无关的方法操作,如:创建、删除文件和重

一、文件的概念以及文件基本函数的操作

? ? ? 1. 什么是文件:文件可认为是相关记录或放在一起的数据的集合? ? ? 2. File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容。? ? ? 3. File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。? ? ? 4. Java中目录被看成是一个特殊的文件。List()方法可以返回目录中所有的子目录和文件。? ? ? 5. 在unix下路径分隔符为(/),而在windos中则是为(),在java中可以正确的处理不同系统中的分隔符。

? ? ? ?示例代码:

java.io.* java.lang.System.* File f1 = File("D:studyaa.txt"); out.println(f1.getPath()); out.println(f1.getAbsolutePath()); out.println(f1.getAbsoluteFile()); out.println(f1.getParent()); File f2 = File("D:studybb.txt" out.println(f1.renameTo(f2)); out.println( Date(f2.lastModified())); out.println(f1.length()); }

二、文件字节流FileInputStream与FileOutputStream的区别以及文件复制的实现

? ? ? ?1. 文件输入流(FileInputStream)与文件输出流(FileOutputStream)的区别

? ? ? ? ? ? ? 1.1 ?FileInputStream:从已经存在的文件中获取里面已输入的内容,获取的是ASCII码字节? ? ? ? ? ? ? 1.2 ?FileOutputStream:把内容写入到指定的文件中去,如果指定的文件不存在则自己创建一个,写入是以字节为单位的,每次只能写一个

? ? ? ?2. 文件复制的实质就是从一个文件中读取内容到另一个文件中去,如果目标文件不存在则自动创建一个

? ? ? ?示例代码:

main(String[] args) FileInputStream f1 = FileInputStream("D:studybb.txt" FileOutputStream f2 = FileOutputStream("D:studyaa.txt" ( i = (i == -1 }

? ? ? 3. 往文件里面写入字符串

? ? ? ?示例代码:

main(String[] args) FileOutputStream f2 = FileOutputStream("D:studydd.txt" OutputStreamWriter osw = BufferedWriter bw = bw.write("您好!" bw.write("您好!" bw.write("您好!" bw.close(); }

三、文件字符流读取(FileReader)与写入(FileWriter)的区别

java.io.* java.lang.System.* main(String[] args) FileReader fr = FileReader("D:studybb.txt"); BufferedReader br = BufferedReader(fr); ((s = br.readLine()) != FileWriter fw = FileWriter("D:studyee.txt" BufferedWriter bw = bw.write("我们" bw.close(); }

四、找到指定目录下指定文件格式的文件

AA .i = name.endsWith( main(String[] args) File f = File("D:study" (File temp : f.listFiles( AA("txt" }

输出结果:

aa.txtbb.txtdd.txtee.txt

五、什么是NIO

? ? ? ? ?NIO提供了一个全新的底层I/O模型,与最初的java.io包中面向流的概念不同,NIO中采用了面向块的概念。

? ? ? ? ?I/O操作以大的数据块为单位进行,而不是一次一个字节或字符进行

? ? ? ? ?采用这样的操作方式java的I/O性能有很大提高,但也牺牲了java操作的简单性。

? ? ? ? ?NIO中所有的操作都要使用到缓冲区(内存)处理,且所有的读写操作都是通过缓冲区(内存)完成的。

? ? ? ? ?NIO提供与平台无关的非阻塞I/O。与面向线程的、阻塞式I/O方式比较,多道通信、非阻塞I/O技术可以使应用程序更有效地处理大量连接的情况。

? ? ? ? ?Java新IO中使用Buffer和Channel支持以上的操作。

六、NIO之Buffer类以及其方法的使用

? ? ? ? 1. Buffer类与StringBuffer非常类似,都可以自动扩容,只不过Buffer的效率更高,因为Buffer类是把内容放入内存中(缓冲区)以数据块的方式读写的,而StringBuffer是以流的方式读写的

? ? ? ? ?示例代码:

java.lang.System.* CharBuffer buffer = CharBuffer.allocate(4 buffer.put('a'); buffer.put('b'); out.println(buffer.position()); out.println(buffer.limit()); out.println(buffer); out.println("-------------------改变指针-------------------------" buffer.position(0 out.println(buffer.limit()); out.println(buffer.capacity()); out.println(buffer); out.println("-------------------重置缓冲区-------------------------" out.println(buffer.limit()); out.println(buffer.capacity()); out.println(buffer); out.println(buffer.position(4)); buffer.put('c'); }

七、NIO之内存映射与传统IO流的区别

? ? ? ? 1.?内存映射可以把文件映射到内存中,这样文件内的数据就可以用内存读写指令来访问,而不是用InputStream或OutputStream这样的I/O操作类,采用此方式读取文件的速度是最快的。使用FileChannel类提供的map()方法。

? ? ? ? 2.?Map()方法在使用时要指定映射模式,在内存映射中提供三种模式:读取和写入:READ_WRITE,只读READ_ONLY,专用(写入时复制)映射模式

? ? ? ? ?示例代码:

main(String[] args) RandomAccessFile fis = RandomAccessFile("D:studycc.txt","rw"); FileChannel fc = fis.getChannel(); MappedByteBuffer mb = fc.map(FileChannel.MapMode.READ_WRITE,4 File("D:studycc.txt" mb.put(1,() '2' mb.put(2,() '3' }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读