java开发知识IO知识之输入输出流以及文件
java开发知识IO知识之输入输出流以及文件
一丶流概述
流十一组有序的数据序列.根据操作的类型,可以分为输入流跟输出流两种. IO(input/output)输入/输出流提供了一条通道程序.可以使用这条通道把源的字节序列送到目的地
简单来说. 就是操作二进制. 二进制提供了读写功能. 写就是输出. 读就是输入.
输入输出流图示:

二丶输入流讲解 InputStream类.
1. 输入流以及类层次结构
输入流就是从"文件" 读取到内存. 这个文件是抽象的.意思就是不管什么内容从硬盘也好.任何地方读到内存就是输入流.
首先InputStream是抽象类. 是素有字节输入流的父类.
抽象类中的方法:
read(); 从输入流中读取数据的下一个字节. 返回0~255范围内的int字节. 也就是读取一个字节.如果到了末尾.返回-1
read(byte[] b); 从输入流中读取一个字节数组大小.
mark(int readlimit); 输入流当前位置放置一个标记. 参数的意思就是告诉输入流在标记位置失效之前允许读取的字节数.
reset(); 将输入指针.返回到当前所做的标记处. 意思就是移动文件指针.移动到你标记的地方.
skip(long n); 跳过n个字节.并返回实际跳过的字节数.
markSupported(); 如果当前流支持 mark()/reset() 操作就会返回true
close(); 关闭流句柄.释放系统资源.
InputStream类的层次结构

我们可以看到.有一个FileInputStream 这个类就是操作文件的.
2.文件操作.使用输入流读取
我们可以使用FileInputStream从一个文件中读取字节到内存.
实现代码
try {
FileInputStream in = new FileInputStream("1.txt");
byte szbuf[] = new byte[10];
in.read(szbuf);//读取到字节数组中
System.out.println(new String(szbuf));
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

java中使用的字符集是UNICODE.是两个字节的. 我们的InputStream是处理一个字节的.所以Java专门提供了对Unicode编码的类

三丶输出流 OutputStream
相应的不光有硬盘读取到内存的操作.也有内存写入硬盘的操作.
那就是输出流.
输出流提供的方法就是 write,以及 write的重载. 具体不做解释. 跟上面一样.写入一个. 或者写入一个字节数组.
特有的方法:
flush(); 我们在内存写入文件的时候.并没有真正的写入,而是在缓存中.等我们使用close关闭文件的时候.
才能写入到内存.但是我们的需求是在写的过程中要把缓存的数据写到文件中.那么就使用这个方法.
Java是Unicode同样的,针对输出也提供了抽象类.Writer

四丶文件的常见与删除
我们上边讲了输入输出流,大概也知道什么意思了.首先我们讲解文件的信息.
File类创建文件对象.
file类是对文件操作的一个封装.三种构造方法
1.File(String pathName); 给一个路径.创建一个File文件.
2.File(String parent,String child): 根据定义的父路径和子路精创建一个新的文件对象.
3.File(file f,String child); 给一个文件对象.与自己给的一个路径创建一个新的file
ps:对于windows来说.文件的创建路径是 \. 对于unix则不一样.
文件操作的常见方法:

1.实例创建文件.获取文件信息
private static void File() {
// TODO 自动生成的方法存根
File f = new File("1.txt");//创建一个文件
OutputStream out = null;
OutputStreamWriter out1 = null;
try {
//给文件写入内容.创建输出流.
out = new FileOutputStream(f);//创建输出流,传入文件.对文件操作.
String str = "HelloWorld";
//out.write(str.getBytes(), 0, str.length()); //写入到文件中
out1= new FileWriter(f);//使用Unicode写入
out1.write(str); //直接写入字符串
out1.flush();
out1.close();
//获取文件信息.
if(f.exists()) { //判断文件是否存在 文件存在,删除文件,下面重新创建文件.
f.delete();
}else {
f.createNewFile();
String FileName = f.getName(); //获取名字
long Filelength = f.length(); //获取长度
boolean bisFile = f.isFile(); //判断是否是个文件
System.out.println("文件名字 = " + FileName);
System.out.println("文件长度 = " + Filelength);
System.out.println("是否文件 = " + bisFile);
}
}catch(Exception e) {
e.printStackTrace();
}
finally {
try {
if(out != null)
out.close();
if(out1 != null) {
out1.close();
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
FileInputStream类以及OutputStream类的作用
以上我们操作的文件其实都是在内存中操作的.我们必须通过输入输出流使这个文件可以跟内存交互.
读取/写入.
上面两个类就是这个作用.
Reader类或者Writer类的作用就是解决上面的输入输出流的缺陷,因为Java是Unicode的.所以我们要两个字节两个字节的读取就使用这两个类即可.
Writer对应的类就是 FileWriter传入文件对象即可.与之对应的还有FileReader类.
总结
1.学习了抽象类 InputStream/OutputStream 输入输出流. 二进制操作读取.或者写入.
2.文件的创建使用 File类. 可以通过构造创建文件.也可以使用内部方法创建.
3.文件的删除一样提供了方法.以及判断文件各种信息.或者获取文件各种信息.获取名字,长度等等.
4.文件操作只是在内存操作.使用FileInputStream类.或者OutputStream使用流的方式跟内存或者文件交互.也就是通过这两个类可以写入到文件.或者读取到内存.
5.Unicode解决方案使用Writed/Reader抽象类. 具体实现类是 FileReader/FileWriter. 操作跟上面一样.
java开发知识IO知识之输入输出流以及文件的更多相关文章
- java学习笔记IO之字节输入输出流
IO字节输入输出流 OutputStream:字节输出流 该抽象类是所有字节输出流的超类: 定义了一些共性的成员方法: 1.写入一个字节 void write(int b);//b表示字节 2.写入字 ...
- IO流 - 字节输入输出流,文件的复制
IO流 I:input - 输入(读取),eg:把硬盘的内容读取到内存 O: output - 输出(写入) eg:把内存中的东西写入硬盘保存 流:数字(字符/字节) 一般1个字符=2Byte,1By ...
- java开发必学知识:动态代理
目录 1. 引言 2. 代理模式及静态代理 2.1 代理模式说明 2.2 静态代理 2.3 静态代理局限性 3. 动态代理 3.1 JAVA反射机制 3.2 JDK动态代理 3.2.1 JDK动态代理 ...
- java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- 第40节:Java中的IO知识案例
流是一连流串的字符,是信息的通道,分输出流和输入流. IO的分类 第一种分:输入流和输出流. 第二种分:字节流和字符流. 第三种分:节点流和处理流. Java中流的分类: 流的运动方向,可分为输入流和 ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)
1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...
- 01 java开发前小知识
1.常见的dos命令 盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. c ...
- Java高级特性 第4节 输入输出流
一.使用I/O操作文件 关键步骤: 使用File类操作文件或目录属性 使用FileInputStream类读文本文件 使用FileOutputStram类写文本文件 使用BufferedReader类 ...
随机推荐
- LPC 网络编程
LPC有五种不同的通信模式(socket模式) ① MUD (面向连接的通信模式) 可以把除Object以外的所有LPC模型从一个MUD传到另一个MUD 弊端: 无法传送物件造成了穿越MUD的功能(即 ...
- W3C的标准到底是啥?
1.图片的alt="" 属性必须每张图片都加上,而且对齐属性用CSS来定义.不加不能通过XHTML 1.0的验证. 2.每个文档必须加上DTD声明. a) !DOCTYPE htm ...
- 读 Spring实战 遇到的问题记录(一)
package soundsystem; import beanConfig.CDPlayerConfig; import org.junit.Rule; import org.junit.Test; ...
- Java 跨平台原理
Java的跨平台基于编译器和虚拟机.其中,CPU处理器和操作系统的整体称为平台.编译器把源文件编译成与平台无关的基于Unicode的字节码class文件,虚拟机把该文件解释成与平台有关的机器码指令,可 ...
- netcore应用程序部署程序到ubuntu
运维需求:获取服务器的运行情况,是否CPU.内存较高等,上报到运维系统 环境:ubuntu16.04 工具::netcore2.1.supervisor 程序实现(代码就不贴了)参考:https:// ...
- List使用linq的OrderBy方法排序,并按照两个字段排序的写法
SfaMember.GetList(searchInfo, 0, 1000, out Allcount).Where(item => item.bOpen == true).OrderBy(it ...
- Tomcat7在centos7.3上正常运行,在centos7.2就不行了
我在jdk1.7的环境下,把一个tomcat7从一台centos7.3的服务器迁移到7.2,理论上讲 迁移完成之后只要端口没有被占用,环境变量配置完成,Tomcat是可以正常启动的(空的Tomcat ...
- 《JavaScript高级程序设计(第3版)》阅读总结记录第二章之在HTML中使用JavaScript
本章目录: 2.1 <script> 元素 2.1.1 标签的位置 2.1.2 延迟脚本 2.1.3 异步脚本 2.1.4 在XHTML 中的用法 2.1.5 不推荐使用的语法 2.2 嵌 ...
- MySQL 中 having 和 where 的区别
区别一: where 是数据从磁盘读入内存时候一条一条判断的 having 是将所有数据读入内存,在分组统计前,根据having的条件再将不符合条件的数据删除 区别二: having 子句可以使用字段 ...
- AWS MVC 详解
由于新工作是在AWS PaaS平台上进行开发,为不耽误工作,先整理一下AWS MVS的使用规范,快速上手.对AWS PaaS平台的相关介绍留到以后再来补充.本文几乎是对官方学习文档的整理,有遗漏的后补 ...