IO的含义:
Stream流
1.流只能单方向流动 2.in输入流 3.out输出流 4.数据值从头到尾读写一次
流分为字节流和字符流
字符流:针对文本文件
字节流:针对二进制文件
file文件类:
概述:封装一个路径字符串,对这个路径可以执行一次操作
可以封装文件路径,文件夹路径,不存在的路径。
创建对象:
new File("d:/abc/a.txt");
new File("d:/abc","a.txt");//两个不同
//文件夹/文件的属性
//不同的方法
length();//文件的字节量
exist();//是否存在,若存在则为true
isFile();//是否为文件,若是文件则为ture
isDirectory();//是否为文件夹
getName();//获取文件/文件名
getParent();//获取父文件夹的路径
getAbsolutePath();//获取完整路径
fileInputStream是inputStream中常见的子类。
fileInputStream是指对文件的数据以字节的形式进行读取操作
常见的方法:
File InputStream(File File)
File InputStream(String path)
void close():关闭同步流;
int read(byte[] b,int off,int len):off到哪里,就读多少
字符读取模板:
目录
1.一次读取一个字节的模板代码:
FileInputStream fis=new FileInputStream("文件");
int char=0;
while((ch=fis.read()!=-1))
{
//处理读取的数据,数据存储在ch空间中
}
关闭流对象:
fis.close();
2.
一次读取多个字节数据模板的代码
FileInputSream file=new FileInputStream("文件");
byte[] buf=new byte[1024];//定义数组,用于存储从底层读取的多个字节数据
int len=0;//用于统计一共读取了多少个字节数据
while((len=fis.read(buf))!=-1)
{
//处理读取出来的数据,数据存储在buff数组中,buffz数组一共存储len个字节数据
}
fis.close();//关闭流对象
OutStream用于操作字符输出流对象;
int write(byte[] buf,int off,int len)
//把buf字符数组中的数据从off下标开始共计写出len个字节数据
FileOutStream(File file)
FileOutStream(String name)
FileOutStream(String name,boolean append)
二.字符流:
字符输入流:Reader
字符输出流:Writer
1.字符输出流:
import java.io.IOException
public class StreamDemo1
{
public static void main(String[] args) {
/*
void write (int b)
void write (byte[]b)
void write (byte[]b,int off,int len)//参数1,数组;参数2,起始索引,参数3:个数
*/
//创建对象
FileOutputStream fos = new FileOutputStream("myiostream\\a.txt");
//1.写出数据
fos.write(97);//a
fos.write(98);//b‘
fos.close();
byte[] bytes = {97, 98, 99, 100, 101};
//2.写出数据
fos.write(bytes);
//3.写出数据
fos.write(bytes, 1, 2);
fos.close();
}
// import java.io.IOException
public class FileOutputStream
{
public static void main(String[] args) {
//换行写:
//续写:
//创建对象
FileOutputStream fos = new FileOutputStream("myiostream\\a.txt");
//2.写出数据 womendouxihuanlanxu--怎么写
String str="womendouxihuanlanxu";//定义一个字符串
byte[] arr=str.getBytes();//arr是包含这个字符串的字符数组
System.out.println("Arrays.toString(arr)");//把arr变成字符串再进行打印
//运行结果为[];
//把str{womendouxihuanlanxu}变为字符数组
fos.write();
}
}
}
2.字节输出流的续写和换行
/*续写:如果想要续写,打开续写开关就可以;
默认false; 表示关闭续写,此时创建对象会清空文件
手动传递true ,表示打开续写,此时创建对象不会清空文件*/
FileOutputStream fos=new FileOutputStream("myiostream\\a.txt");
String str="womendouxihuanlanxu";
byte[] bytes1= str.getBytes();
fos.write(bytes1);
//再写出一个换行符就可以了
String wrap="\r\n";
byte[] bytes2=wrap.getBytes();
fos.write(bytes2);
String str3="666";
byte[] byte3=str3.getBytes();
fos.write(byte3);
fos.close();
}
3. 字节输入流
//read方法是用来读取文件里面的数据的
package ..
import java.io.FileInputStream;
public class StreamDemo2
{
//这个是字节流,可以从txt等所有文件中读取-在java-idea中显示
public static void main(String[] args) {
//1.创建对象
FileInputStream fis = new FileInputStream("myiostream\\a.txt");
//2.读取数据
int b1 = fis.read();
System.out.println(b1);
//3.释放资源
fis.close();
int b2 = fis.read();
System.out.println(b2);
fis.close();
int b3 = fis.read();
System.out.println(b3);
fis.close()
int b4 = fis.read();
System.out.println(b4);
fis.close();//如果文件中只到b3,那麽这里输出-1;
/*书写细节:如果文件不存在,就直接报错
***输出流(output)如果不存在,创建
*而输入流(input)如果不存在,报错 because:创建出来的数据没有意义
* 一次读取一个字节,读出来的是ASCII的数字txt文件里面是abc---idea中就是97.98.99
* 末尾:-1;
*/
}
}
4.字节输入流的循环读取
//字节输入流的循环读取
FileInputStream fis=new FileInputStream("myiostream\\a.txt");
int b;//需要第三方变量b
//read方法是读取数据,读取一次,指针向后一次
//循环读取
while((b=fis.read())!=-1)
{
}
fis.close();
}
三: 字符流:
1.字符Reader流
//字符流
//Reader,Writer
FileReader在纯文本文件中
FileReader fr=new FileReader("myiostream\\a.txt");
int ch;
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);//中文汉字转化为汉字,需要char
}
fr.close();
}
FileReader fr=new FileReader("myiostream\\a.txt");
char [] chars =new char[2];//表示一次读两个数据
int len;
while((len=fr.read(chars))!=-1)
//read()空参到十进制就结束
//read(chars)把强制转换的字符放到数组中
//read()+强转==read(chars)
{
System.out.print(new String (chars,0,len));//ln删掉
}
fr.close();
2. 字符输出流
FileWriter fr=new FileWriter("myiostream\\a.txt");
fw.write(25105)//我,如果写25105这种多个字节的,需要字符流(输出)
fw.close();//输出
fw.write("你好棒呀");
fw.close();//输出字符串
char [] chars={'a','b','c','宝宝'};
fw.write(chars);
fw.close();//输出字符数组