文件IO流-阿里云开发者社区

开发者社区> 一条coding> 正文

文件IO流

简介: 内存:断电后所数据都丢失,程序结束后所有变量、对象都被系统回收 文件:断电后数据不丢失,以文件为单位进行操作
+关注继续查看

文件与流

内存:断电后所数据都丢失,程序结束后所有变量、对象都被系统回收


文件:断电后数据不丢失,以文件为单位进行操作


根据流向和数据单位可以分成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分

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10018 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26776 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9154 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13821 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4653 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4490 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7344 0
+关注
121
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载