Java中如何实现文件的输入和输出?

Python012

Java中如何实现文件的输入和输出?,第1张

程序如下:\x0d\x0a \x0d\x0a\x0d\x0aFile file1 = new File("/home/a123/a")\x0d\x0a\x0d\x0aif (file1.exists()) { \x0d\x0aSystem.out.println("存在文件夹a") \x0d\x0a} else { \x0d\x0afile1.mkdir()// 文件夹的创建 创建文件夹/home/a123/a \x0d\x0a} \x0d\x0aFile file2 = new File("/home/a123/a/test") \x0d\x0aif (file2.exists()) { \x0d\x0aSystem.out.println("存在文件夹或者文件test") \x0d\x0a} else { \x0d\x0atry { \x0d\x0afile2.createNewFile()// 文件的创建,注意与文件夹创建的区别 \x0d\x0a} catch (IOException e) { \x0d\x0a// TODO Auto-generated catch block \x0d\x0ae.printStackTrace() \x0d\x0a} \x0d\x0a} \x0d\x0a \x0d\x0a/** \x0d\x0a * 最简单的文件读写方法是使用类FileWriter \x0d\x0a * (它的父类依次是java.io.OutputStreamWriter——>java.io.Writer——>java.lang.Object )\x0d\x0a */ \x0d\x0a \x0d\x0a// 下面是向文件file2里面写数据 \x0d\x0atry { \x0d\x0aFileWriter fileWriter = new FileWriter(file2) \x0d\x0aString s = new String("This is a test! \n" + "aaaa") \x0d\x0afileWriter.write(s) \x0d\x0afileWriter.close()// 关闭数据流 \x0d\x0a\x0d\x0a} catch (IOException e) { \x0d\x0a// TODO Auto-generated catch block \x0d\x0ae.printStackTrace() \x0d\x0a} \x0d\x0a \x0d\x0a/* \x0d\x0a * 这样写数据的话,是完全更新文件test里面的内容,即把以前的东西全部删除,重新输入。 \x0d\x0a * 如果不想删除以前的数据,而是把新增加的内容增添在文件末尾处。只需要在创建FileWriter对象时候,使用另外一个构造函数即可: \x0d\x0a * FileWriter fileWriter=new FileWriter(file2,true)\x0d\x0a */ \x0d\x0a \x0d\x0a// 下面是从文件file2读东西 \x0d\x0atry { \x0d\x0aFileReader fileReader = new FileReader(file2) \x0d\x0aString s = null \x0d\x0achar ch \x0d\x0atry { \x0d\x0achar[] c = new char[100] \x0d\x0afileReader.read(c,0,2)// 具体想得到文件里面的什么值(单个char?int?还是String?), \x0d\x0aSystem.out.println(c) \x0d\x0afileReader.close() \x0d\x0a \x0d\x0a} catch (IOException e) { \x0d\x0a// TODO Auto-generated catch block \x0d\x0ae.printStackTrace() \x0d\x0a} \x0d\x0a \x0d\x0a} catch (FileNotFoundException e) { \x0d\x0a// TODO Auto-generated catch block \x0d\x0ae.printStackTrace() \x0d\x0a} \x0d\x0a/** \x0d\x0a * 具体想得到文件里面的什么值(单个char?int?还是String?),需要知道不通read的不同用法: \x0d\x0a * 1. int read() 读取单个字符。 \x0d\x0a * 2. int read(char[] cbuf) 将字符读入数组。可以再将字符型数组转化位字符串 \x0d\x0a * 3. int read(char[] cbuf,int off,int len) 将字符读入数组的某一部分。 \x0d\x0a * 这三个方法都返回一个int值,作用是:读取的字符数,如果已到达流的末尾,则返回 -1. \x0d\x0a */ \x0d\x0a \x0d\x0a}

在Java程序中,要想从文件中读取数据,需要在程序和文件之间建立一条数据输入的通道,这样程序就可以从文件中读取数据了;反之,如果要在Java程序中把数据写入到文件中,也需要在程序和文件之间建立一条数据输出的通道。当程序创建输入流对象时,Java会自动建立这个数据输入通道,而创建输出流时,Java也会自动建立这个数据输出通道。如下图所示:

Java程序读取与写入数据

输入流是从文件读取数据,是一个拉取数据的过程;输出流是将数据写入到文件,是一个推送数据的过程。

为了便于理解输入输出流,前面都是以文件为数据源来讨论的。其实,Java的输入与输出流支持任何数据源的读取与写入,包括键盘、文件、网络、数据库等数据源。

输入流和输出流按读取和写入的数据单位可分为字节流和字符流,字节流是以字节为单位传输数据的流,字符流是以字符为单位传输数据的流。

Java所提供的输入流和输出流类封装在Java.io包中