【黑马程序员】java中的IO

                                 ------- android培训java培训、期待与您交流! ------……

 一:操作文件的类 File :

 File类是唯一与文件本身有关的类。

 File 类的常用方法有:

 1.File(string path) 构造方法传入文件路径

2.separator  分隔符

3.boolean createNewFile() 创建新文件

4.delete  删除文件

5.exists()  判断文件是否存在

6.isDirectory() 判断是否是目录

7.length() 返回文件的大小

8.string【】 list() 列出指定目录的内容,只列出名称

9.File【 】 ListFiles() 列出全部内容包括路径

10.boolean mkdir() 创建一个目录

11.boolean renameTo() 改变名称

 

File 针对文件本身进行操作,RandomAccessFile 类则对文件内容进行操作。

RandomAccessFile 类一些方法:

1.RandomAccessFile(File f,string mode) 接收file对象,指定操作路径,设置模式

 “r”只读, “w” 只写,  “rw” 读写

2.RandomAccessFile(string path,string mode) 不接受对象,直接传路径

3.read(byte【】) 将内容读到字节数组中

4.readByte() 读取一个字节

5.readInt() 读取一个数字

6.writeInt()写入一个数字

 例子关键代码:

public static void main(String[] args) {
  listF(new File("d:/test"), 0);
 }
 
 public static void listF(File f, int level) {
  String preStr = "";
  for(int i=0; i<level; i++) preStr += "    ";
  System.out.println(preStr + f.getName());
  if(f.isDirectory()) {
   File[] files = f.listFiles();
   for(File cf : files) listF(cf, level + 1);

 

二。IO:

IO主要有字节流和字符流两大类。其中每类又有输入和输出操作。

字节流主要outputStream 类和 inputStream 类来操作。

字符流主要用reader类 和writer 类来操作。

1.字节流:

 字节流outputStream类和InputStream 类都是抽象类因此必须使用它们的子类进行实例化 FileOutputStream 类和 FileInputStream 类。

 常用方法有:

1.close() 关闭

2.flush()刷新缓冲区

3.write() 写入

4.FileOutputStream(File file, boolean apend) 是否追加内容

5.FileOutputStream(File file) 不追加

6.FileInputStream(file )

7.read()读取

8.int available() 返回输入文件的大小

一些用法:

要构造一个FileInputStream,所关联的文件必须存在而且是可读的。

       FileInputStream fis = new FileInputStream(" ");

要构造一个FileOutputStream,而输出文件已经存在,则它将被覆盖。                       

       FIleOutputStream fos= new FileOutputStream("results.dat");

 要想以追加的方式写,则需要一个额外的参数,如:

    FileOutputStream outfile =new FileOutputStream("results.dat" ,true);  

 

2.字符流

write 和read 也是抽象类 ,所有常用的是子类 FileWrite 类和 Fileread类

常用方法有:

1.close() 关闭

2.flush() 刷新缓冲

3.write() 写入

4.read() 读取

一些代码:

FileWriterfw=null;

fw=newFileWriter("D:/test.txt");

fw.write("

fw.flush();

fw.write("

 复制文件

FileReader fr = null;

              FileWriter fw = null;

             fr= new FileReader("demo.txt");

              fw= new FileWriter("copyDemo.txt");

                 char[]buf = new char[1024];

                     intlen = 0;

                   while((len=fr.read(buf)) != -1)   

                            fw.write(buf,0,len);      

 

 

字符流读取的两种方式:

第一种读取方式 一次读一个字符

            FileReader fr = new FileReader("Demo.txt");

       int line=0;     

       while ((line=fr.read())!=-1)

        {

            sop((char)ch);

       }

   第二种读取方式

        FileReader fr = newFileReader("Demo.txt");   //Demo.txt中的数据读到控制台

        char[] buf = new char[1024];

       int len=0;

       while((len=fr.read(buf))!=-1)           

       {

          sop("num="+num+"...."+new String(buf,0,len));

       }

三: 缓冲流

缓冲流要套接在相应的节点流之上,提高了读写的效率。

字符流缓冲区:

缓冲区的出现提高了对流的操作效率。

原理:其实就是将数组进行封装。

对应的对象

BufferedWriter

特有方法newLine(),跨平台的换行符。

BufferedReader

特有方法readLine(),一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,读到末尾返回null。

说明在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在。其实缓冲区内部就是在使用流对象的方法,只不过加入了数组对数据进行了临时存储,为了提高操作数据的效率

关键代码:

BufferedWriter bufw=newBufferedWriter(new FileWriter(“test.txt”));

bufw.write(“数据”);

bufw.flush();

bufw.close();

BufferedReader bufr=newBufferedReader(new FileReader(“test.txt”));

String line=null;

while((line=bufr.readLine())!=null){

system.out.println(line);

}

 bufr.close()

 

四:转换流

字节流和字符流之间的桥梁

该流对象可以对读取到的字节数据进行指定编码表的编码转换。

 InputStreamReader需要和InputStream套接

 OutputStreamWriter需要和OutputStream套接

注意:这两个流对象是字符流体系中的成员,它们有转换的作用,而本身又是字符流,所以在new的时候需要传入字节流对象

 OutputStreamWriter osw = new OutputStreamWriternew FileOutputStream(文件路径);

构造函数

InputStreamReader(InputStream)通过该构造函数初始化,使用的是系统默认的编码表GBK。

InputStreamReader(InputStream,Stringcharset)通过该构造函数初始化,可以通过charset参数指定编码。

OutputStreamWriter(OutputStream)使用的是系统默认的编码表GBK。

OutputStreamWriter(OutputSream,Stringcharset)通过该构造函数初始化,可以通过参数charset指定编码。

 

 

五:数据流与字节数组流:

   数据流主要为实现可以存取Java原始数据类型如longboolean

   数据流是字节流

   DataInputStream需要和InputStream套接

   DataOutputStream需要和OutputStream套接

   DataInputStream方法:readBoolean() readInt() read()

   readUTF()网络传输常用方法读一个Unicode字符串

   DataOutputStream方法与DataInputStream基本对应为写的方法

ByteArrayOutputStream baos = new ByteArrayOutputStream()此方法为获取一个字节数组方法返回字节数组

   baos.toByteArray()此方法获取字节数组占了多少字节

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值