import java.io.FileWriter;
import java.io.IOException;
/*
* IO流:处理设备之间的数据传输
* Input Output
*
* 按照方向分:输出流,输入流
* 按照操作的数据分:字节流 字符流
*
* 字节流:可以操作任何类型的数据实现输入和输出
* 字符流:只能针对文本实现输入和输出
* 在字节流的基础上融入了编码,方便文本的输入和输出
字节流:两个父类
字节输入流的父类:OutputStream
字节输出流的父类:InputStream
字符流:两个父类
字符输入流的父类:Reader
字符输出流的父类:Writer (从内存中向硬盘中写)
设备:键盘,控制台,内存,硬盘,网络
以硬盘为例学习输入和输出(从文件读是写到内存中去,是输入)
*/
public class Demo5{
public static void main(String[] args) throws IOException {
/* 向文本文件中写入数据
因为是文本文件所以使用字符流,又因为是写入,所以使用Writer,又因为是文件
所以使用可以向文件写入数据的字符输出流类
1.创建文件写入流对象和被写入数据的文件相关联 */
FileWriter fw=new FileWriter("C://Users//Administrator//Desktop//temp.txt");
//2:使用输出流对象向文件中写入数据
//数据写入到输出流对象的内部数组中了,这一个字节数组,因为要查编码表,把查表的结果写入文件中
fw.write("我爱你");
fw.flush();//把内部缓冲中的数据刷新到文件中,刷完之后可以继续写,但是关闭之后就不能再写了
fw.close();
}
}
==================================================================
标准写法
import java.io.FileWriter;
import java.io.IOException;
public class Demo5{
public static void main(String[] args) {
FileWriter fw=null;
try {
fw=new FileWriter("c:\\Users\\Administrator\\Desktop\\temp.txt");//以为路径错误导致FilteWriter对象创建失败java.io.FileNotFoundException
fw.write("我爱你1111");
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if (null!=fw) {
fw.close();//因为上一步是null,null.close();就报空指针.所以加了一个不等于null
}
} catch (IOException e) {
throw new RuntimeException("写入流失败");
}
}
}
}
===================================================文件续写,写入换行
import java.io.FileWriter;
import java.io.IOException;
/*
*文件续写,换行
*/
public class Demo5{
public static void main(String[] args) {
//文件的续写
FileWriter fileWriter=null;
try {
fileWriter=new FileWriter("c:\\Users\\Administrator\\Desktop\\temp.txt", true);
fileWriter.append("1314");
//写入换行
fileWriter.write("\r\n");
fileWriter.write("嗨,换行");
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (null!=fileWriter) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
========每次读取一个字符---------------------
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/*
*读取文本文件
*从文本文件读取数据
*因为是文本文件所以使用字符流,又因为是读取所以使用Reder,又因为是操作的是文件,所以使用
*操作文件的字符流输入流类
*/
public class Demo5{
public static void main(String[] args) {
//1.创建文件读取流对象和被读取的文件相关联
//读取数据
//int read() 读取单个字符,返回的是字符编码
int num;
try {
FileReader fileReader=new FileReader("c:\\Users\\Administrator\\Desktop\\temp.txt");//文件必须存在
while ((num=fileReader.read())!=-1) {
System.out.print((char)num);//int read() 读取单个字符,返回的是字符编码,这里强转下
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
=======================================读取字符优化================================================
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/*
文件读取优化
int read(char[] cbuf)将字符读入数组
*/
public class Demo5 {
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader(
"c:\\Users\\Administrator\\Desktop\\temp.txt");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
char arr[] = new char[2];
int num;
try {
while ((num = fileReader.read(arr)) != -1) {
System.out.print(new String(arr));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
================================================字节流========================
package Demo1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo66 {
public static void main(String[] args) {
writeFile();
readFile();
}
//字符输出流
public static void readFile() {
try {
FileInputStream fis = new FileInputStream(
"C:\\Users\\Administrator\\Desktop\\新建文件夹\\1.txt");
byte[] arr = new byte[1024];
int length;
while ((length = fis.read(arr)) != -1) {
System.out.println(new String(arr,0,length));//代表从第几个字符开始读
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//字符写入流
public static void writeFile(){
try {
FileOutputStream fos=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文件夹\\1.txt");
fos.write("爱你一万年,爱你".getBytes());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
============使用字节流复制视频=========
package Demo1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo66 {
public static void main(String[] args) {
copyPirtcure();
}
// 复制视频
public static void copyPirtcure() {
BufferedInputStream bufferfi = null;
BufferedOutputStream outputfos = null;
try {
FileInputStream fi = new FileInputStream(
"F:\\BaiduYunDownload\\传智播客PHP培训.刘道成.PHP视频教程.mysql.第41讲.存储过程.wmv");
FileOutputStream fos = new FileOutputStream(
"C:\\Users\\Administrator\\Desktop\\新建文件夹\\存储过程1.wmv");
bufferfi = new BufferedInputStream(fi);
outputfos = new BufferedOutputStream(fos);
int length = 0;
byte[] arr = new byte[1024];
while ((length = bufferfi.read(arr)) != -1) {
outputfos.write(arr);
}
} catch (Exception e) {
System.out.println("文件复制失败");
e.printStackTrace();
} finally {
if (outputfos != null) {
try {
outputfos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bufferfi != null) {
try {
bufferfi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
=========================================