黑马程序员--Java IO
来源:互联网 发布:移动网络优化是什么 编辑:程序博客网 时间:2024/04/29 02:20
------- android培训、java培训、期待与您交流! ----------
Java IO
IO流:输入流和输出流, 每种输入、输出流有可分为字节流和字符流两大类。
File 类:File 类代表与平台无关的文件和目录,File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容。如果需要访问,则需要使用输入/输出流。
File类提供的方法有五大类:
1. 访问文件名/文件路径如getName(),getAbsoluteFile()等
2. 文件检测:exits(),canWrite()等
3. 获取文件信息:lastModify,length()等
4. 文件操作:createNewFile(),delete()等
5. 目录操作:mkDir(),list(),listFile等
测试File类中的一些方法代码
<span style="font-size:14px;">@Test publicvoid testFile() throws IOException { Filefile = new File("hellojava.txt"); Filefile3=new File("D:\\Workspaces\\MyEclipse 8.5\\lesson1_javase"); //打印文件的路径 System.out.println(file.getAbsolutePath());//D:\Workspaces\MyEclipse8.5\lesson1_javase\hellojava.txt System.out.println(file3.getAbsoluteFile());//:\Workspaces\MyEclipse8.5\lesson1_javase System.out.println(file3.getParent());//D:\Workspaces\MyEclipse8.5 Filefile2 = new File("您好.txt"); System.out.println("存在性:"+file2.exists()); //是否可写? System.out.println("可读性:"+file2.canWrite()); //判断文件是否存在 System.out.println(("可写性:"+file2.canRead())); //试图创建文件.先判断文件是否存在,存再返回flase,不再返回true,并创建文件 System.out.println(file2.createNewFile()); System.ou t.println(file2.length()); }</span>
IO 流的分类:
- 按流向分:输入流、 输出流
- 按处理的单位: 字节流(8 位的字节)、字符流(16 位的字节)
- 按流的角色:节点流:可以从一个特定的 IO 设备读/写数据的流;处理流:对一个已存在的流进行连接和封装,通过封装后的 流来实现数据读/写操作
IO流体系:
InputStream& Reader:InputStream 和 Reader 是所有输入流的基类。
InputStream: InputStream(典型实现:FileInputStream)
- int read() \\一个一个字节读取
- intread(byte[] b)\\一次读一组字节
- int read(byte[] b, int off, int len)\\读取到一个很大的数组空间b,并且从b数组的第off个元素开始,len为长度.
Reader:(典型实现:FileReader)
- int read()
- int read(char[] c)
- int read(char[] c, int off, int len)
OutputStream &Writer:OutputStream 和 Writer 也非常相似,并且他们分别对应着 InputStream&Reader。
缓冲流:
BufferedReader&BufferedWriter,BufferedInputstream&BufferedOutputstream:分别是对相应流对的包装,提高了效率
以BufferedReader&BufferedWriter为例:
<span style="font-size:14px;">@Test publicvoid testBufferWithReaderAndWriter() throws IOException { //1.创建输入输出流 Reader reader = new FileReader("hello.txt"); Writerwriter = new FileWriter("hello3.txt"); //2.创建BufferedReader和BufferedWriter BufferedReader bufferedReader = new BufferedReader(reader); BufferedWriter bufferedWriter = new BufferedWriter(writer); Stringstr; inti=0; //3.输入输出操作; while((str = bufferedReader.readLine()) != null) { if(i!=0){ bufferedWriter.write("\n"); } bufferedWriter.write(str); i++; } //4.关闭流资源 bufferedReader.close(); bufferedWriter.close(); }</span>
转换流:InputStreamReader&OutputStreamWriter
把字节流转换为字符流,注意没有将字符流转换为字节流的io流.
InputStream in = newFileInputStream("hello.txt");//创建输入流对象
InputStreamReaderinputStreamReader = new InputStreamReader(in);//把字节流转换为字符流
BufferedReader bufferedReader =new BufferedReader(inputStreamReader);//把字符流包装为字符缓冲流.
对象流:ObjectInputStream&ObjectOutputStream:
将对象保存在磁盘上或者在网络上直接传输对象,注意没有ObjectReaderStream和ObjectWriterStream.
对象的序列化和反序列化:
序列化:
序列化是RMI(RemoteMethod Invoke – 远程方法调用)目的是将对象保存在磁盘上或者在网络上直接传输对象,
<span style="font-size:14px;"> /* * 序列化 --把对象写入磁盘 */@Testpublic void testObjectOutputStream() throws IOException {OutputStream outputstream = new FileOutputStream("ObjectTest.txt");ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputstream);objectOutputStream.writeObject(new Person("林冲", 29));// 关闭流资源objectOutputStream.close();outputstream.close();}/* * 反序列化--从读取对象 */@Testpublic void testObjectInputStream() throws IOException,ClassNotFoundException {InputStream in = new FileInputStream("ObjectTest.txt");ObjectInputStream objectInputStream = new ObjectInputStream(in);// 读取对象System.out.println(objectInputStream.readObject());// 关闭流资源in.close();objectInputStream.close();}</span>
<span style="font-size:14px;">@Testpublic void testWrite1() throws IOException {// 创建输出流对像OutputStream out = new FileOutputStream("趁早.txt");String contentString = "到后来才发现爱你是一种习惯\n" + "我学会和你说一样的谎\n"+ "你总是要我在你身旁\n" + "说幸福该是什么模样\n" + "你给我的天堂\n" + "其实是一片荒凉\n"+ "要是我早可以和你一刀两断\n" + "我们就不必在爱里勉强\n" + "可是我真的不够勇敢\n"+ "总为你忐忑为你心软\n" + "毕竟相爱一场\n" + "不要谁心里带着伤\n" + "我可以永远笑着\n"+ "扮演你的配角\n" + "在你的背后自己煎熬\n" + "如果你不想要\n" + "想退出要趁早\n"+ "我没有非要一起到老\n" + "我可以不问感觉\n" + "继续为爱讨好\n" + "冷眼的看着你的骄傲\n"+ "若有情太难了\n" + "想别恋要趁早\n" + "就算迷恋你的拥抱\n" + "忘了就好\n"+ "爱已至此怎样的说法都能成为理由\n" + "我在这样的爱情里看见的\n" + "是男人的软弱\n";int len = 10;byte[] contentBytes = contentString.getBytes();System.out.println(contentBytes.length);//time为复制的次数int times = contentBytes.length / 10;// System.out.println(48/10);//两个整数相除结果也为整数// System.out.println(times);for (int i = 0; i < times; i++) {out.write(contentBytes, i * 10, len);// 第一次i=0及即从contentByte数组的0开始,每次增加长度为len的字符片段}// 如果长度不是10的整数倍,则在上一段的基础上把剩余的几个字符添加进去if ((contentBytes.length % 10) != 0) {out.write(contentBytes, 10 * times, contentBytes.length - 10* (times));// contentbytes不能改为10*times是因为time精度减小了}out.write(contentString.getBytes());out.close();}/* * 文件复制 */@Testpublic void testCopy() throws IOException {//创建流对象InputStream in = new FileInputStream("实现多线程的两种方式.wmv");OutputStream out = new FileOutputStream("实现多线程的两种方式2.wmv");int len = 0;//创建缓存数组byte[] buffer = new byte[1024 * 10];while ((len = in.read(buffer)) != -1) {//从输入流读取buffer数组长度的字节到buffer中。// System.out.println(len);out.write(buffer, 0, len);// 从buffer数组的偏移量 0 开始的 len 个字节写入输出流}//关闭流资源in.close();out.close();//输入复制文件的大小信息File file = new File("实现多线程的两种方式2.wmv");System.out.println("文件大小:" + (float) file.length() / 1024 / 1024 + "M");}</span>
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员---java io
- 黑马程序员--Java IO
- 黑马程序员--IO(Java)
- 黑马程序员Java----IO
- 黑马程序员----java----io
- 黑马程序员 Java IO流
- 黑马程序员--Java IO流
- 黑马程序员Java Io 日记
- 黑马程序员 Java IO操作
- 黑马程序员----Java(IO流)
- 黑马程序员---IO流【java】
- 黑马程序员-java IO流
- 【黑马程序员】java中的IO
- 黑马程序员-java IO流
- 黑马程序员--Java IO(一)
- 黑马程序员--JAVA IO(二)
- 黑马程序员-java-流(IO)
- 黑马程序员 Java--IO流
- TP-LINK WR720N 无线路由器 局域网内 设置上网 步骤
- HDOJ 5071 Chat 模拟
- oracle 细粒度审计使用
- C#实现的分数类
- poi操作word文档文件操作
- 黑马程序员--Java IO
- Hatsune Miku+hdu+鞍山区域赛+简单dp
- Atitit.软件仪表盘(8)--os子系统--资源占用监测
- UVA - 10344 23 out of 5
- 在jquery中怎么使用css 类名和id 来获得元素
- Atitit.软件仪表盘(2)--vm子系统--资源占用监测
- ~这些年,我带CSDN俱乐部那些事儿~01~会员注册指南~
- Atitit.软件仪表盘(4)--db数据库子系统-监测
- 【boost学习】之boost::asio(1)——Timer定时器