- 文件与流
内存:断电后所数据都丢失,程序结束后所有变量、对象都被系统回收
文件:断电后数据不丢失,以文件为单位进行操作
-
- 根据流向和数据单位可以分成4种流
输入字节流
输出字节流
输入字符流
输出字符流
输入输出是站在内存的角度,读写是站在文件的角度
输入(从内存)——读
输出——写
-
- 操作文件的步骤
- 读文件
- 操作文件的步骤
- 创建文件和对象的关联
使用File类来创建文件对象
- 创建数据流通道
InputStream类是所有输入字节流的父类,它是一个抽象类
实际的文件操作使用FileInputStream类来完成
这个类会抛出一个异常FileNotFoundException
- 读取文件
int read( ) 每次读取一个字节的数据,存入返回值中,结束时返回-1
int read(byte[] b) 每次读取b.length个字节的数据,存入数组b中,结束时返回-1
- 关闭流通道
close( )
-
-
- 写文件
-
- 创建文件的关联
使用File类来创建文件对象
- 创建数据流通道
OutputStream类是所有输出字节流的父类,它是一个抽象类
FileOutputStream类来完成文件的写操作
这个类会抛出一个异常FileNotFoundException
-
- 当写入的文件不存在时,会先创建文件,再进行写入
- 当写入的文件存在时,会将内容清空,再从头写入
- 当写入的文件存在时,并且将append参数设为true时,数据将写入到文件末尾
- 写入文件
write(int b)
write(byte[] b)
- 关闭流通道
close( )
-
-
- 字节缓冲流
-
缓冲输入字节流 BufferedInputStream
缓冲输出字节流 BufferedOutputStream
处理过程
- 创建文件和对象的关联
- 创建数据流通道
- 基于流通道,创建缓冲流通道
- 读/写文件
- 关闭流通道
-
-
- 字符流
-
输入字符流
Reader类是所有输入字符流的父类,它是一个抽象类
实际的文件操作使用FileReader类来完成
输出字符流
Writer类是所有输出字符流的父类,它是一个抽象类
实际的文件操作使用FileWriter类来完成
处理过程
- 创建文件和对象的关联
- 创建数据流通道
- 读/写文件
- 关闭流通道
结论:
如果要处理非文本文件,如音频、视频、图片等,使用字节流
如果要处理文本文件,如.txt文件,使用字符流
-
-
- 字符缓冲流
-
缓冲输入字符流
BufferedReader
String readLine() 每次从文件中读一行文本
缓冲输出字符流
BufferedWriter
void newLine( ) 向文件中写入1个空行
字符缓冲流在原有的功能上进行了扩展
处理过程
- 创建文件和对象的关联
- 创建数据流通道
- 基于流通道,创建缓冲流通道
- 读/写文件
- 关闭流通道
-
-
- 异常处理
-
在文件操作过程中要处理异常的原因
- 保证数据的完整性
- 保证资源及时释放
保证close会被执行
-
-
- 对象流
-
输入对象流 ObjectInputStream
Object readObject()
输出对象流 ObjectOuputStream
void writeObject(Object obj)
处理过程
- 创建文件和对象的关联
- 创建数据流通道
- 基于流通道,创建对象流通道
- 读/写文件
- 关闭流通道
public static void main(String[] args) throws IOException {
File file =new File("e:/test.txt");
student stu =new student();
//写入对象
FileOutputStream fo=new FileOutputStream(file);
ObjectOutputStream oo=new ObjectOutputStream(fo);
oo.writeObject(stu);
oo.close();
System.out.println("done");
}
说明:要将对象写入文件,该要实现Serializable接口
结论:文件和内存是完全不同的使用方式,因此我们不能象使用集合那样去操作文件中的对象
对文件通常进行整体处理
写入处理
- 将多个对象保存到集合
- 将集合一次性的写入文件
读出处理
- 将文件读入一个集合中
- 再对集合中的对象进行操作
-
-
- 打印流
-
PrintStream
通常用于输入Log日志
处理过程
- 创建文件和对象的关联
- 创建数据流通道
- 基于流通道,创建打印流通道
- 读/写文件
- 关闭流通道
1.delete目录下全部文件:
file.delete不能删除非空目录
public class fileclear {
public static void main(String[] args) {
File file=new File("E:\\Youku Files\\youkudisk");
delect(file);
}
public static void delect(File file1){
if(file1.isDirectory()){
File[]files= file1.listFiles();
for (int i = 0; i <files.length ; i++) {
System.out.println(files[i]);
delect(files[i]);
}
file1.delete();
}else file1.delete();
}
}
编写一个程序,从文件(文件名键盘输入)得到该文件保存的10个正整数,并输出这10个整数的最大值和最小值。
参考答案(Java):
public class GetMaxMin{
public static void main(String[] args) throws Exception {
String file = new Scanner(System.in);
int i, n=10, max=0, min=0 , temp = 0;
try{
Reader in = new FileReader(file);
BufferedReader br=new BufferedReader(new InputStreamReader(in);
max=min=Integer.parseInt(br.readLine( ));
} catch ( Exception e ) {
System.out.println("文件错误");
}
for ( i = 2 ; i <= n ; i ++ ) {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
temp=Integer.parseInt(br.readLine( ));
if (temp > max ) max=temp;
if (temp < min) min=temp;
}catch( IOException e ) { } ;
}
System.out.println("max="+max+"\nmin="+min);
}
}
评分标准:
1、文件读取正确可得3分
2、数据读取方法正确可得3分
3、判断大小正确可得2分
4、循环正确可得2分