JavaIO输入输出学习之一

                                      一、File类

1.File类是IO保存唯一代表磁盘文件信息的类,而不是文件本身中的内容。
2.File类定义了一些与平台无关的方法来操纵文件。如创建,删除和重命名。
3.java中的目录被当做一种特殊的文件使用,可以用list方法返回目录中的所有子目录和文件名
4.unix下路径分隔符/, dos下为/.

------------

构造方法1:public File(String pathname)实现了Comparable<File>接口。说明可以比较的

static String separator  定义常量     与系统有关的默认名称分隔符,出于方便考虑,它被表示为一个字符串

------------
1.File类的几种基本方法;
getName()获取文件名
getPath() 获取相对路径
getAbsolutePath()绝对路径
getParent()返回目录名
File f=new Flie(“adc//1.txt”)此中有2个斜杠。其中一个为转义符

---------------------

1、文件的创建:
在windows中使用/,
linux中使用的是正/.
 File f=new File("d:"+File.separator+“test.txt”) 或是(“d://test.txt”)
  f.createNewFile();注意异常的抛出。

2.文件删除:
   f.delete();     在删除前最后使用exists() 方法来测试此文件是否存在。

3.文件夹得创建mkdir() 方法

4.列出指定目录的全部文件:
1>.以字符窜数组形式返回:public String[] list();列出的是文件名字
String [] str=f.list();//列出指定目录中的内容。
for(int  i=0;i.str.length;i++){
system.out.println(Str[i]);       //循环方式输出
}
2>.以File数组的形式返回:public File【[] listFile()列出的是完整路径

5、isDirectory() 判断是否是目录

-----------------------

1.列出目录下的文件和子目录,子目录下的文件和子子目录。

public static void main(String args []){

File my = new File("d:" + File.separator) ; 

          print(my) ;
 }
 public static void print(File file){ // 递归调用
  if(file!=null){ // 判断对象是否为空
   if(file.isDirectory()){ // 如果是目录
    File f[] = file.listFiles() ; // 列出全部的文件
    if(f!=null){ // 判断此目录能否列出
     for(int i=0;i<f.length;i++){
      print(f[i]) ; // 因为给的路径有可能是目录,所以,继续判断
     }
    }
   }else{
    System.out.println(file) ; // 输出路径
   }
  }

                              二.RandomAccessFiles类

1.File类是对文件的操作,RandomAccessFiles类是对文件内容进行的操作。

2。构造方法之一:RandomAccessFile(File file, String mode)
          创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。mode参数r,w,rw。

3.写入数据

      File f = new File("d:" + File.separator + "test.txt") ;
  RandomAccessFile rdf = null ;  // 声明RandomAccessFile类的对象
  rdf = new RandomAccessFile(f,"rw") ;

      都要使用close()方法

4.读取数据。
skipBytes(int n)
          尝试跳过输入的 n 个字节以丢弃跳过的字节。
void seek(long pos)
          设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。

 

                                 三。字符流和字节流

1、流的概念:
字节序列的抽象概念。流提供了一种方法。
文件实数解决静态存储形式,流是指数据传输时的形态。

程序中的所有数据都是以流的方式进行传输的或保存,程序需要时使用输入流读取,需要保存时使用输出流完成。

2。字节流和字符流:
如果只用RandomAccessStream操作文件内容太复杂。则可以使用字节流和字符流。
字节流主要使用inputStream和Outputstream类
字符流使用Writer和Reader类
JavaIo类操作文件的步骤:
A。用File类代课一个文件。
B。通过字节流或字符流的子类,指定输出的位置。//子类实例化父类。多态性
c。进行读写操作。
d。关闭输、输入输出流

3.?有了垃圾回收器为什么还要用close()
close()通知系统对象处理资源
java垃圾回收期只能处理自己的垃圾

 

4、字节流操作的byte数据类型。
 OutputStreanm字节输出流最大父类
File f= new File("d:" + File.separator + "test.txt") ; // 声明File对象
  OutputStream out = null ; // 准备好一个输出的对象
  out = new FileOutputStream(f)  ; // 通过对象多态性,进行实例化
  String str = "Hello World!!!" ;  

  byte b[] = str.getBytes() ;   // 只能输出byte数组,所以将字符串变为byte数组
  out.write(b) ;      // 将内容输出,保存文件
  // 第4步、关闭输出流
  out.close() ;   

默认是覆盖的。FileOutputStream构造方法中有个Append方法。属性值true是追加内容


5、InputStream读取文件。开辟空间符合文件大小。
如果想知道文件大小。可以使用File类的length()方法。
byte b[]=new byte[(int)f.length()]

5.当不知道文件大小,就读到底:
byte b[] = new byte[1024] ;  

  int len = 0 ;
  int temp = 0 ;   // 接收每一个读取进来的数据
  while((temp=input.read())!=-1){
   // 表示还有内容,文件没有读完
   b[len] = (byte)temp ;
   len++ ;
  }

 

6字符流的操作:
字符流的操作比字节流操作好一点,就是可以直接输出字符窜,不用进行转换操作
7.字节流和字符流的区别:
字节流操作时本身不会用到缓冲区(内存),是文件本身直接操作,而字符流操作时会使用到缓冲区。
在字节流操作中最后没有使用close(),数据也能输出的。
在字符流操作中没有使用close(),数据没有输出。只有使用了关闭,才能强制刷新缓冲区,然后将内容输出。
也可以手工调用flush方法来操作。
9.在开发中使用哪种流比较好。
在所有硬盘上保存的文件或是传输时候都是以字节方式进行的,而字符只有在内存中才会形成,所以使用字节流是最多的。

 

10.文件的copy
public class Copy{
 public static void main(String args[]){
  if(args.length!=2){  // 判断是否是两个参数
   System.out.println("输入的参数不正确。") ;
   System.out.println("例:java Copy 源文件路径 目标文件路径") ;
   System.exit(1) ; // 系统退出
  }
  File f1 = new File(args[0]) ; // 源文件的File对象
  File f2 = new File(args[1]) ; // 目标文件的File对象
  if(!f1.exists()){
   System.out.println("源文件不存在!") ;
   System.exit(1) ;
  }
  InputStream input = null ;  // 准备好输入流对象,读取源文件
  OutputStream out = null ;  // 准备好输出流对象,写入目标文件
  try{
   input = new FileInputStream(f1) ;
  }catch(FileNotFoundException e){
   e.printStackTrace() ;
  }
  try{
   out = new FileOutputStream(f2) ;
  }catch(FileNotFoundException e){
   e.printStackTrace() ;
  }
  if(input!=null && out!=null){ // 判断输入或输出是否准备好
   int temp = 0 ; 
   try{
    while((temp=input.read())!=-1){ // 开始拷贝
     out.write(temp) ; // 边读边写
    }
    System.out.println("拷贝完成!")
        input.close() ;  // 关闭
         out.close() ;  // 关闭
   }
 } 

 

                四。 字节-字符转换流

OutputStreamWriter和InputStreamReader类

 

                     五。内存操作流

ByteArrayInputStream
ByteArrayOutputStream类
这两个类是将文件的内容输入输出的位置设置在了内存之上
1、构造方法
ByteArrayInputStream(byte[] buf)
          创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
ByteArrayInputStream(byte[] buf, int offset, int length)
          创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
2、构造方法摘要
ByteArrayOutputStream()
          创建一个新的字节数组输出流。
ByteArrayOutputStream(int size)
          创建一个新的字节数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。
void write(int b)
          将指定的字节写入此字节数组输出流。

3.编程把一个大写字符窜转化成小写的。
如果想要把一个字符由大写变成小写,需要包装类Charter类static char toLowerCase(char ch)
          使用来自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。
String str = "HELLOWORLD" ;  // 定义一个字符串,全部由大写字母组成
  ByteArrayInputStream bis = null ; // 内存输入流
  ByteArrayOutputStream bos = null ; // 内存输出流
  bis = new ByteArrayInputStream(str.getBytes()) ; // 向内存中输出内容
  bos = new ByteArrayOutputStream() ; // 准备从内存ByteArrayInputStream中读取内容
  int temp = 0 ;
  while((temp=bis.read())!=-1){
   char c = (char) temp ; // 读取的数字变为字符
   bos.write(Character.toLowerCase(c)) ; // 将字符变为小写
  }
  // 所有的数据就全部都在ByteArrayOutputStream中
  String newStr = bos.toString() ; // 取出内容
  try{
   bis.close() ;
   bos.close() ;
  }catch(IOException e){
   e.printStackTrace() ;
  }
  System.out.println(newStr) ;
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值