一、字符流(字节流+编码表)
Reader基本方法
Write基本方法
//将文字存入硬盘中(输出流)
//如果要操作文字数据,优先考虑字符流Writer
//硬盘基本数据的体现是文件FileWriter
public class Demo {
public static void main(String[] args) throws IOException {
//创建一个可以往文件中写入字符数据的字符流输出对象
//往一个文件中写入数据,就必须明确该文件(用于存储数据的目的地)
//如果文件不存在,自动创建;如果文件存在,则会被覆盖。
FileWriter fw = new FileWriter("demo.txt");
//调用对象中的writer方法,写入数据
//writer方法,其实是将数据写入到临时存储缓冲区中
fw.write("abcde");
//进行刷新,将数据直接写到目的地,刷新一次后还可以继续写数据,可以用多次
//fw.flush();
//关闭流(关闭资源)前,会调用flush()刷新,关闭后不可以再写入数据,
fw.close();
}
}
public class Demo {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static void main(String[] args) throws IOException {
//构造方法中添加true,可以对文件续写
FileWriter fw = new FileWriter("demo.txt",true);
//fw.write("abcde\r\nhahahahh");//windows系统换行是\r\n
fw.write("abcde" + LINE_SEPARATOR + "hahahahh");//使用系统的换行
//fw.flush();
fw.close();
}
}
public class Demo {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("e:\\demo.txt");//抛异常是因为可能文件不存在,路径错误
fw.write("abcde" + LINE_SEPARATOR + "hahahahh");//抛异常是因为写入失败
} catch (IOException io) {
sopl(fw.toString());
} finally {
if (fw != null) {
try {
fw.close();//抛异常是因为windows底层反映的
} catch (IOException io) {
throw new RuntimeException("关闭失败");
}
}
}
}
}
//读取方式1:一次读一个字符read(),依次读
public class Demo {
public static void main(String[] args) throws IOException {
//创建一个读取字符流数据的对象
FileReader fw = new FileReader("demo.txt");
int ch = 0;
while ((ch = fw.read()) != -1) {
sopl(ch);//返回读取字符的二进制,读到结尾返回-1
}
}
}
//读取方式2:使用read(char[])
public class Demo {
public static void main(String[] args) throws IOException {
FileReader fw = new FileReader("demo.txt");
//先创建字符数组
char[] c = new char[1024];//长度最好为1024的整数倍
int num = 0;//将读到的字符存到数组中
while ((num = fw.read(c)) != -1) {
sopl(num);//返回读到的字符个数
sopl(new String(c,0,num));
}
}
}
//复制文本文件:边读边写
public class Demo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("Demo.txt");
FileWriter fw = new FileWriter("Demo(1).txt");
int ch = 0;
while ((ch = fr.read()) != -1) {
fw.write(ch);
}
//也可以使用read(char[]),最好带着异常处理写
fr.close();
fw.close();
}
}
二、 字节流
InputStream基本方法
OutputStream基本方法
public class Demo {
public static void main(String[] args) throws IOException {
FileInputStream fip = new FileInputStream("Demo(byte).txt");
//建议使用这种方法读数据
byte[] b = new byte[1024];
int len = 0;
while((len = fip.read(b)) != -1) {
sopl(new String(b, 0, len));
}
/*
sopl(fip.available());//文件大小,对于大文件可以用来分段对文件进行读取
byte[] b = new byte[fip.available()];
fip.read(b);
sopl(new String(b));
*/
}
}
public class Demo {
public static void main(String[] args) throws IOException {
FileInputStream fip = new FileInputStream("E:\\BaiduYunDownload\\JAVA\\IO\\08_PrintIO.avi");
FileOutputStream fop = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\08_PrintIO(1).avi");
byte[] b = new byte[1024];
int len = 0;
while((len = fip.read(b)) != -1) {
fop.write(b, 0, len);
}
fip.close();
fop.close();
}
}
public class Demo {
public static void main(String[] args) {
byte[] b = new byte[1024];
int len = 0;
FileInputStream fip = null;
try {
fip = new FileInputStream("e:\\java.txt");
} catch(FileNotFoundException e) {
sopl("文件不存在");
}
try {
while((len = fip.read(b)) != -1) {
sopl(new String(b, 0, len));
}
fip.close();
} catch(IOException e) {
sopl("文件关闭错误");
}
}
}