java核心技术-IO
输入输出(IO流)流程图:
字节流 :一切皆为字节
1)字节输出流 (OutputStream)
Java.io.OutputStream;
方法:
1)public void close();
2) public void flush();
3) public abstract void write(int b);
FileOutputStream :向文件中写数据,继承自 outputStream ;文件字节输出流
把内存中的数据写入到硬盘文件中
构造方法: FileOutputStream extends OutputStream
FileOutputStream(string naem)
FIleoutPutstream( FIle file) ;
写入数据的原理(内存–》硬盘)
java程序–》JVM—>OS—>OS调用方法—>把数据写入到文件中
字节输出流的使用步骤:(重点)
1)创建对象 FileoutputStream对象,构造方法中传递写入数据的目的地
2) 调用Fileoutptstream对象的write,把数据写入到文件中
3) 释放资源
代码:
FileOutputStream fos=new FileOutputStream(“a.txt”);
fos.write(97);
fos.close();
文件存储的原理:
一次写多个字节的方法:
1) public void write(byte[] b);
一次写多个字节,如果写的第一个字节是正数,显示的时候查ASCII码表
如果写的时候第一个字节是负数,那第一个字节会和第二个自己组成一个中午显示。
2) public void write(byte[] b int off,int len);
字节输出流的续写和换行:
FileoutputSteam(string name,boolean apped);
Fileoutputsteram(File file,boolean append);
append: 追加写的开关,为true时继续在文件的末尾追加数据
FileOutputStream fos=new FileOutputStream("c.txt",true);
for (int i = 0; i <10; i++) {
fos.write("你好".getBytes());
fos.write("\r\n".getBytes());
}
fos.close();
字节输入流:InputStream :所有字节输入流的超类(抽象类)
方法:
int read();
int red(byte[] b) ;
FileInputStream :文件字节输入流
构造方法:
FileInputStream(File file)
FileInputStream(String name)
FileInputStream(FileDescriptor fdObj)
构造方法的作用:
1)创建一个FileInputStream的对象
2)会把FileInputStream对象指定构造方法中读取的文件
读取数据的原理: (硬盘—》内存—)
java程序–》JVM—>OS–>调用系统方法–>读取文件
字节输入流的使用步骤:
1)创建对象 :FileInputStream,构造方法中绑定要读取的数据源
2)使用FileInputStream对象中的方法read,读取文件
3)释放资源
读取文件是一个重复的过程,可以用循环,电脑上不知道文件中有多少个字节,所有用while循环。
while循环介绍条件,读取到-1 结束
int len=0;
while((len=read())!=-1)
{
sout(len);
}
1)fis.read(); //读取一个字节
2)fis.read(byte[] b) ;//一次读取多个字节
明确俩件事情:
1)方法的参数byte[]的作用
2)方法返回值int是什么
1)byte数组起到缓冲作用,存储每次读取到的多个字节。
2)数组的长度一般定义为1024 ,或者1024的整数倍
3)方法的返回子,每次读取到的有效字符个数
字节流操作 :文件复制
原理图:
首先明确:
1)数据源
2)目的地
文件复制的步骤:
1)创建一个字节输入流对象,构造方法中绑定要读取的数据源
2)创建一个字节输出流对象,构造方法中绑定要写入的目的地
3)使用字节输入流对象中的方法,read读取文件
4)使用字节输出流中的write方法,把读取到的字节写入到目的文件中
释放资源:先关闭写的,再关闭读的。因为写完了一定读完了。
FileInputStream fis=new FileInputStream("C:\\Users\\15209\\Pictures\\美食\\me.jpg");
FileOutputStream fos=new FileOutputStream("C:\\Users\\15209\\Pictures\\电脑网站\\me.jpg");
byte[] bytes=new byte[1024];
int len=0; //每次读取有效字节个数
while((len=fis.read(bytes))!=-1)
{
fos.write(bytes,0,len);
}
fos.close();
fis.close();
字符流:
一个中文:
GBK :占用俩个字节
UTF-8:占用三个字节