zoukankan      html  css  js  c++  java
  • Java文件输入输出

      1 package org.java;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.BufferedWriter;
      5 import java.io.File;
      6 import java.io.FileInputStream;
      7 import java.io.FileOutputStream;
      8 import java.io.FileReader;
      9 import java.io.FileWriter;
     10 import java.io.FilenameFilter;
     11 import java.io.IOException;
     12 
     13 
     14 public class JavaUseTest {
     15 
     16     public static void main(String[] args) {
     17 /*
     18  Java文件输入输出
     19  从输入流中 读取数据
     20 在输出流中 写入数据
     21 
     22 Java.io包提供流类
     23 InputStream抽象类    的 子类 创建的 流对象 称为 字节输入流
     24 OutputStream抽象类 的 子类 创建的 流对象 称为  字节输出流
     25 Reader抽象类  的 子类 创建的 流对象 称为字符输入流 
     26 Writer抽象类  的 子类 创建的 流对象 称为字符输出流
     27 
     28 
     29 File类:
     30 主要 获取一些文本信息:
     31 构造方法:
     32 File(URI uri);//传入文件的目录地址和名字 :file.txt:绝对路径是->C:UsersNirobert EintesonDesktopjavaFilefile.txt
     33 File(String filename);//filename文件名字;会被认为在当前应用程序在同一目录;hello.txt:C:UsersNirobert Eintesoneclipse-workspaceHelloWorldhello.txt
     34 File(String directoryPath,String filename);//directoryPath文件路径
     35 File(File fileParentPath,String name);//在 file 的父路径 路径 下创建  新的 文件 filex.txt;
     36 
     37 文件的属性:
     38 public String getName();//获取文件的名字
     39 public boolean canRead();//判断文件是否是  可读的
     40 public boolean canWrite();//判断文件是否是 可被写入
     41 public boolean exists();//判断文件是否 存在
     42 public String getAbsolutePath();//获取文件的绝对路径
     43 public String getParent();//获取文件的父目录
     44 public boolean isFile();//判断文件是否是 一个普通的文件,而不是目录
     45 public boolean isDirectory();//判断文件是否是一个目录
     46 public boolean isHidden();//判断文件是否是 隐藏文件
     47 public long lastModified();//获取文件的 最后修改的时间(毫秒数)
     48 public long length();//获取文件的长度
     49 public boolean delete();//删除文件;file.delete();
     50 public boolean createNewFile();//如果目录中没有要创建的文件,那么会调用这个方法,创建这个文件
     51 public 
     52 
     53 
     54 文件的创建
     55 File file=new File(filename);
     56 文件的删除
     57 
     58 目录:
     59 pubic boolean mkdir();//创建一个目录 创建成功返回true,否则返回false(文件已存在也是false);
     60 public String[] list();//以字符串形式目录下的所有文件
     61 public String[] list(FilenameFilter object);//以字符串形式 返回目录下指定的类型的文件 如:.txt,.java
     62 public File[] listFiles();//以File对象的形式返回目录下的所有文件
     63 public File[] listFiles(FilenameFilter object);//以 File对象的形式 返回返回目录下指定的类型的文件 如:.txt,.java
     64 
     65 FilenameFilter是一个接口;有方法accept(File dir,String name);需要实现接口
     66 public boolean accept(File dir,String name);
     67 
     68 字节型
     69  基本管道:FileInputStream  FileOutputStream
     70 增强型 管道:在基本管道的外面 包上一层)
     71 DataInputStream DataOutputStream
     72 BufferedInputStream  BufferedOutputStream
     73 ObjectInputStream ObjectOutputStream
     74 增强型管道的 源 和目的地 都是 字节型 基本管道
     75 public DataInputStream(InputStream   in) 
     76 public DataOutputStream(OutnputStream  out) 
     77 public BufferedInputStream(InputStream in) 
     78 public BufferedInputStream(InputStream in, int size) 
     79 public BufferedOutputStream(OutputStream out) 
     80 public BufferedOutputStream(OutputStream out, int size) 
     81 ObjectInputStream(InputStream in)
     82 ObjectOutputStream(OutputStream out) 
     83 对象输出流使用writeObject(Object obj)方法将一个对象obj写入到一个文件;对象输入流使用readObject()读取一个对象到程序中。
     84 当使用对象流写入或读入对象时,要保证对象是序列化的 
     85 一个类如果实现了Serializable接口(java.io包中的接口),那么这个类创建的对象就是所谓序列化的对象 。
     86 
     87 
     88 
     89 字符型:
     90 基本管道:
     91 FileReader  FileWriter
     92 增强型:
     93 BufferedReader  BufferedWriter
     94 
     95 
     96  
     97  
     98  文件字节流:
     99  读写文件的子类:FileInputStream 和FileOutputStream 
    100  若只是简单的读写文件,那么就可以使用FileInputStream 和FileOutputStream 
    101  
    102 
    103 
    104  文件字节输入流:
    105  关闭输入流 :fileInputStream.close();
    106 FileInputStream 是 InputStream 的子类:
    107 构造方法:
    108 FileInputStream(String name);
    109 FileInputStream(File file);
    110 参数name 和file 称为输入流的源,输入流通过调用read方法 读出 源 中的数据
    111 
    112 以字节为单位 读 文件
    113 //2^8 =256-> 返回(0,255)字节值,到达末尾 返回-1
    114 int read();//输入流 调用read() 方法 顺序 地 从源 中读取 单个  字节数据 ;
    115 int read(byte b[]);//按照字节  顺序地 从文件中读取b.length个数据,然后放到 字节数组 b里面
    116 int read(byte b[],int off,int len);///按照字节  顺序地 从文件中 off开始  顺序地  读取len个字节 , 放到 字节数组 b里面
    117 read读取文件,只要不关闭流,那么每次调用read 方法 都会顺序地 读取剩余 的内容,直到读完流中的文件 或者文件关闭
    118 
    119 FileOutputStream类:
    120 关闭输出流: 关闭输入流 :fileOutputStream.close();
    121 构造方法:
    122 FileOutputStream(String name);
    123 FileOutputStream(File file);
    124 以name ,file 作为目的地 把数据在 输出流中 写入文件中
    125 
    126 以字节为单位 写入文件:
    127 //以字节为单位顺序写入 数据
    128  public void write(byte b[]);//把字节数组中 数据 全部写入到文件中
    129  public void write(byte b[],int off,int len);//把字节数组中 偏移量off开始 共len个字节 数据,写入到文件中
    130 
    131 
    132 字节流 :的 read()和write() 方法
    133 字节流不能很好的 处理Unicode字符 ,如汉字在文件中 占两个字节,使用字节流,可能出现乱码
    134 可以加大 输入输出流的 强度 
    135 
    136 将字节型 流 变成 字符型流
    137 变成 FileReader()和 FileWriter() 是 Reader和Writer的子类
    138 在java.io.*包里面
    139 构造方法:
    140 FileReader(String filename);
    141 FileReader(File filename);
    142 FileWriter(String filename);
    143 FileWriter(File filename);
    144 
    145 字符型read(),write()方法
    146 int read();//从源 中读取一个字符  ,返回(0-65535,Unicode字符值),读出失败返回-1
    147 int read(char ch[]);//从源 中读取  ch.length 个 字符 ,放到 字符 数组 ch中;到达 源(文件) 的末尾 返回-1
    148 int read(char ch[],int offset,int len);//从源 中从off开始 读取  len 个 字符 放到 字符数组 ch里面,到达 源(文件) 的末尾 返回-1;
    149 void write(char ch);//字符输出流 写入 一个 字符
    150 void write(char ch[]);//在字符输出流中  写入 一个 字符数组
    151 void write(char ch[],int off,int len);//在字符输出流中  写入 一个 字符数组 的off开始   ,共len个字符 
    152 
    153 
    154 
    155 
    156 缓冲流:
    157 BufferReader类:缓冲输入流
    158 BufferWriter类:缓冲输出流
    159 如果要读取一行,那么字符型输入流 很难 知道一行是 多少个字符,所以采用 缓冲输入流
    160 
    161 缓冲流的 源和目的地: 必须是 字符输入流 和 字符输出流 
    162 构造方法:
    163 BufferedReader(reader in);
    164 BufferedWriter(Writer out);
    165 
    166 向BufferedReader 传递 一个Reader的 子类 对象   (如:FileReader fileReader)来创建BufferedReader对象
    167 如:        FileReader fileReader=new FileReader(file);
    168         BufferedReader bufferedReader=new BufferedReader(fileReader);//创建 缓冲 输入流 对象 
    169         String  str=bufferedReader.readLine();//方法读取一行数据,赋值给str-->toCharArray()变成字符数组
    170         //newLine();//写入一个回车符号
    171 BufferedWriter(Writer out);
    172 
    173 write(String str,int off,int len);//字符串str从 off开始 ,共len个字符 写入 文件中
    174 
    175 字符输入流FileReader 首先 将 数据 读入缓存,然后 BufferedReader缓冲输入流 再从 缓存中 读取数据
    176      BufferedWriter缓冲输出流 先向 缓存中 写入数据,然后字符输入流FileWriter将 缓存 中的 数据 写入 目的地;
    177          当BufferedWriter 调用flush()方法 刷新 缓存 或close()方法 关闭的时候,即使 缓存 没有 溢出,仍然要 将缓存的内容送入目的地
    178              要先关闭 缓冲流,然后才能关闭 字符流
    179      
    180 
    181 
    182  */
    183         String path="C:\Users\Nirobert Einteson\Desktop\java\File\";//文件的所在的目录 
    184         
    185         File file=new File(path+"file.txt");//在path路径下 创建file.txt文件
    186         File file2=new File("file2.txt");//默认 和当前应用程序在同一目录;即:*.java 在同一目录下
    187         File file3=new File(path,"file3.txt");//在path路径下,创建file3.txt文件
    188         File file4=new File(file3.getParent(),"file4.txt");//在 file3的父路径 路径 下创建  新的 文件 file4.txt;
    189     
    190         System.out.println(file.getName()+" :绝对路径是->"+file.getAbsolutePath());
    191         System.out.println(file2.getName()+":绝对路径是->"+file2.getAbsolutePath());
    192         System.out.println(file3.getName()+":绝对路径是->"+file3.getAbsolutePath());
    193         System.out.println(file4.getName()+":绝对路径是->"+file4.getAbsolutePath());
    194         
    195         System.out.println("file文件是否可读"+file.canRead());
    196         System.out.println("file文件是否可写"+file.canWrite());
    197         System.out.println("file文件的长度"+file.length());
    198 
    199         //路径  path 下.的内容;//.代表 当前路径
    200         File dir=new File(path+".");//C:UsersNirobert EintesonDesktopjavaFile.
    201         //取出目录下的 所有.txt文件
    202         String[] filenames=dir.list(new FilenameFilter(){
    203             //重写 接口的 方法,这里属于是匿名接口的实现
    204             @Override
    205             public boolean accept(File dir,String name) {
    206                 return name.endsWith(".txt");//dir路径下;名字以.txt结尾的文件
    207             }});
    208         //文件以字符串的形式  已经存到 filenames里面
    209         System.out.println(path+"路径下以.txt结尾的文件有"+filenames.length+"个"+"
    "+"分别是:");
    210         for(String name1:filenames) {
    211             System.out.println(name1);
    212         }
    213         
    214         //直接获取文件夹里面的所有文件 存到字符串数组里面
    215         File file5=new File(path+".");//C:UsersNirobert EintesonDesktopjavaFile.
    216         String names[]=file5.list();//获取这个路径下的所有文件
    217         System.out.println(path+"路径下以.txt结尾的文件有"+names.length+"个"+"
    "+"分别是:");
    218         for(String name1:names) {
    219             System.out.println(name1);
    220         }
    221         
    222         //删除文件
    223         file3.delete();
    224         System.out.println(file3.exists());
    225         
    226         try {//文件可能会抛出异常 ,所以需要在try-catch语句里面进行写
    227             
    228             //在输出流中 ,向文件写入数据--write();方法
    229             FileOutputStream fileOutputStream3=new FileOutputStream(file3);
    230             //变成字节数组,在 文件输出流中 ,写入到文件里面
    231             byte byteFile[]="this is a byte stream".getBytes();
    232             fileOutputStream3.write(byteFile);
    233             fileOutputStream3.close();
    234             
    235             FileOutputStream fileOutputStream4=new FileOutputStream(file4);
    236             fileOutputStream4.write(byteFile);
    237             fileOutputStream4.close();
    238             
    239             //从文件字节 的输入流 中读数据--->read()方法
    240             FileInputStream fileInputStream=new FileInputStream(file);
    241             
    242             byte byteReadData[]=new byte[8];//初始化8个字节数组
    243             int data;
    244             while((data=fileInputStream.read(byteReadData,0,8))!=-1) {//每次都读取8个字节 放到 byteReadData字节数组里面
    245                 //data位每次从输入流中 实际读取了多少个数据
    246                 //String string=new String(byteReadData,0,data);//data是每次读取了多少个字节数,比如8,8,8,3最后一个到不了8个字节
    247                 //String string2=new String(byteReadData,0,8);//每次都输出8个,可能不正确,比如只读出了3个却输出了8个
    248                 //System.out.println(string);
    249             }
    250             fileInputStream.close();
    251             
    252             
    253             //字符型 输出流
    254             
    255             FileWriter fileWriter=new FileWriter(file);
    256             char ch[]="这是一个字符型流测试的样例".toCharArray();//字符串 变成 字符串数组
    257             fileWriter.write(ch);//字符数组
    258             fileWriter.write(ch, 4, 3);//字符数组
    259             fileWriter.write('X');//写入一个字符
    260             fileWriter.write("hello",1,3);//字符串 
    261             fileWriter.close();
    262             
    263             //字符输入流
    264             FileReader fileReader=new FileReader(file);
    265             char readChar[]=new char[8];//每次读取8个字符
    266             int index=0;
    267             while((index=fileReader.read(readChar,0,8))!=-1) {
    268                 String tmp=new String(readChar,0,index);
    269                 System.out.println("读取的字符型数据:"+tmp+"
    ");
    270                 System.out.println("读取单个字符:"+(char)fileReader.read());//返回0-65535转成字符
    271             }
    272             fileReader.close();
    273             
    274             
    275             // 缓冲 输出流
    276             FileWriter fileWriter2=new FileWriter(file);
    277             BufferedWriter bufferedWriter=new BufferedWriter(fileWriter2);
    278             bufferedWriter.write("hhhhhhhh+ko+'
    '+ok+hhhhhhhh");
    279             bufferedWriter.newLine();//写入换行符
    280             bufferedWriter.close();//要先关闭 缓冲流,然后才能关闭 字符流
    281             fileWriter2.close();
    282             
    283             
    284             //缓冲 输入流
    285             FileReader fileReader2=new FileReader(file);
    286             BufferedReader bufferedReader=new BufferedReader(fileReader2);
    287             String string=null;//string用来接收 readLine() 字符串,最后默认返回为null
    288             while((string=bufferedReader.readLine())!=null) {//只要读出的 不是null,说明不为空
    289                 System.out.println("缓冲输入流:读出的文件是:"+string);
    290             }
    291             bufferedReader.close();//要先关闭 缓冲流,然后才能关闭 字符流
    292             fileReader2.close();
    293             
    294             
    295         }catch (IOException e) {
    296             System.out.println(e);
    297         }
    298         
    299     }
    300 
    301 }

    输出结果:

     1 file.txt :绝对路径是->C:UsersNirobert EintesonDesktopjavaFilefile.txt
     2 file2.txt:绝对路径是->C:UsersNirobert Eintesoneclipse-workspaceHelloWorldfile2.txt
     3 file3.txt:绝对路径是->C:UsersNirobert EintesonDesktopjavaFilefile3.txt
     4 file4.txt:绝对路径是->C:UsersNirobert EintesonDesktopjavaFilefile4.txt
     5 file文件是否可读true
     6 file文件是否可写true
     7 file文件的长度29
     8 C:UsersNirobert EintesonDesktopjavaFile路径下以.txt结尾的文件有3个
     9 分别是:
    10 file.txt
    11 file3.txt
    12 file4.txt
    13 C:UsersNirobert EintesonDesktopjavaFile路径下以.txt结尾的文件有3个
    14 分别是:
    15 file.txt
    16 file3.txt
    17 file4.txt
    18 false
    19 读取的字符型数据:这是一个字符型流
    20 
    21 读取单个字符:测
    22 读取的字符型数据:试的样例字符型X
    23 
    24 读取单个字符:e
    25 读取的字符型数据:ll
    26 
    27 读取单个字符:�
    28 缓冲输入流:读出的文件是:hhhhhhhh+ko+'
    29 缓冲输入流:读出的文件是:'+ok+hhhhhhhh
  • 相关阅读:
    关于For循环的性能
    CLR读书笔记
    轻量级自动化测试框架介绍
    loadrunner中如何将MD5加密的值转换为大写
    LoadRunner 中实现MD5加密
    新安装的soapui启动时报错及解决方法
    单元测试之驱动模块和桩模块的作用和区别
    接口自动化(Python)-利用正则表达式从返回的HTML文本中截取自己想要的值
    LoadRunner性能测试-loadrunner事务
    LoadRunner性能测试-loadrunner工具破解
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12019898.html
Copyright © 2011-2022 走看看