700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java字节输出流方法 Java-IO:File和字节输入输出流

java字节输出流方法 Java-IO:File和字节输入输出流

时间:2022-12-26 02:22:20

相关推荐

java字节输出流方法 Java-IO:File和字节输入输出流

一. File类

我们可以通过File类的一个接受字符串类型的构造方法来创建一个File实例

File(Stringpathname)//通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。

有了该实例,我们就可以通过下面的方法在指定路径下下创建和删除文件:

boolean exists():判断文件或者目录是否存在

booleancreateNewFile():创建文件

booleandelete():删除文件

packageio.zhangjia.io;

importjava.io.File;

importjava.io.IOException;

publicclassFile{

publicstaticvoidmain(String[]args)throwsIOException{

//zhangjia文件夹是存在的

Filefile=newFile("E:\\zhangjia\\text.txt");

if(!file.exists()){

//这里先不处理异常,先抛出

file.createNewFile();//如果E盘的zhangjia文件夹下的text.txt不存在,就创建这个文件

}else{

file.delete();//如果存在,就删除这个文件

}

}

}

上面的例子中,在E盘下,zhangjia的文件夹是已经存在的,所在可以直接在该路径下判断test.txt是否存在

但是如果zhangjia文件不存在,或者zhangjia文件下还有多级目录,则需要先判断上机目录是否存在,才能去创建和删除test.txt文件

File getParentFile():获取上级目录

boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。

packageio.zhangjia.io;

importjava.io.File;

importjava.io.IOException;

publicclassFile{

publicstaticvoidmain(String[]args)throwsIOException{

Filefile=newFile("E:\\zhangjia\\a\\b\\c\\text.txt");

if(!file.getParentFile().exists()){//如果上级目录不存在

file.mkdirs();//则递归创建所有不存在的上级目录

}

if(!file.exists()){

//这里先不处理异常,先抛出

file.createNewFile();//如果text.txt不存在,就创建这个文件

}else{

file.delete();//如果存在,就删除这个文件

}

}

}

二. InputStream:字节输入流

字节输入流的操作步骤:

使用File类确定要操作的文件

使用InputStream的子类FileInputStream进行对象实例化

进行读操作

释放资源

我们可以使用字节输入流来读取本地磁盘的文件内容:

int read() :从此输入流中读取一个数据字节。

int read(byte[] b) : 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 返回读入缓冲区的字节总数,如果已经到达文件末尾而没有更多的数据,则返回 -1。

int read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。返回读入缓冲区的字节总数

接下来,我们在text.txt中存入下面的内容:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

然后读取上面的文件内容:

packageio.zhangjia.io;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.util.Arrays;

publicclassFileInputStream{

publicstaticvoidmain(String[]args)throwsIOException{

Filefile=newFile("E:\\zhangjia\\text.txt");

FileInputStreamis=newFileInputStream(file);

//不带参数的read方法,每次只读文件的单个字符

intread=is.read();

System.out.println("read="+read);//read=65

read=is.read();

System.out.println("read="+read);//read=66

byte[]bytes=newbyte[20];

intread2=is.read(bytes);

System.out.println("read2="+read2);//read2=20

Strings=newString(bytes);//将字节数组转换为字符串

System.out.println("s="+s);//s=CDEFGHIJKLMNOPQRSTUV

byte[]bytes2=newbyte[20];

intread3=is.read(bytes2,1,2);

System.out.println(Arrays.toString(bytes2));

//[0,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

is.close();

}

}

上面我们已经说过,read的带一个参数和带两个参数的方法,如果已经到达文件末尾,返回值都是-1,我们便可以利用这个特性来循环遍历文件的所有内容:

packageio.zhangjia.io;

importjdk.nashorn.internal.ir.WhileNode;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.util.Arrays;

publicclassFileInputStream{

publicstaticvoidmain(String[]args)throwsIOException{

//1.使用File确定要读取的文件

Filefile=newFile("E:\\zhangjia\\text.txt");

//2.实例化FileInputStream

FileInputStreamis=newFileInputStream(file);

//3.开始读

byte[]bytes=newbyte[512];//长度任意,但是建议给偶数,防止中文乱码,其实偶数也有可能会中文乱码

StringBuffersb=newStringBuffer();

intlen=-1;

while((len=is.read(bytes))!=-1){

/*

通过使用平台的默认字符集解码指定的byte子数组,构造一个新的String,新String的长度是字符集的函数

bytes-要解码为字符的byte

offset-要解码的第一个byte的索引

length-要解码的byte数

*/

Strings=newString(bytes,0,len);

/*还可以再加一个参数,String(byte[]bytes,intoffset,intlength,StringcharsetName)

通过使用指定的字符集解码指定的byte子数组,构造一个新的String。比如:

Strings=newString(bytes,0,len,"UTF-8");

*/

sb.append(s);

}

System.out.println(sb);

//输出:ABCDEFGHIJKLMNOPQRSTUVWXYZ

is.close();

}

}

二.OutputStream:字节输出流

字节输入流的操作步骤:

使用File类确定要操作的文件

使用OutputStream的子类FileOutputStream进行对象实例化

进行写操作

释放资源

packageio.zhangjia.io;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

publicclassFileOutputStream{

publicstaticvoidmain(String[]args)throwsIOException{

//1.使用File确定要写入的文件

Filefile=newFile("E:\\zhangjia\\text.txt");

//2.实例化FileOutputStream

//FileOutputStreamos=newFileOutputStream(file);//替换原文件的所有内容

FileOutputStreamos=newFileOutputStream(file,true);//在原文件内容基础上添加内容

//3.开始写

Stringstr="zhangjia";

byte[]bytes=str.getBytes();//将字符串转换为字节数组

//os.write(bytes);//全部写入

os.write(bytes,0,2);//只写入两个,此时原文件变成了:ABC....XYZzh

os.close();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。