IO和NIO
一、文件的概念以及文件基本函数的操作 ? ? ? 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'
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |