您的位置:首页 > 编程语言 > Java开发

JavaIO输入输出学习之一

2011-01-25 21:09 447 查看
一、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) ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: