java输出/输出——文件读写示例代码总结
2017-06-01 16:10
656 查看
JAVA程序所有的读写操作都是通过流来实现的,根据组成流的不同,可将其分为字节流和字符流。字节流是由字节组成的,主要用在处理二进制数据,字符流是由字符组成,主要处理文本的数据。(JAVA中,一个字节有8b,一个字符有两个字节)
一、文件类
File类不属于Java流系统,但它是文件流进行文件操作的辅助类,File类的对象并不打开文件或目录,而是指定要操作的文件或目录。
使用createNewFile()创建新文件代码示例:
二、字节流
字节流一般用于读取或者写入二进制数据,如图片、音频文件;字符流无法正常处理的二进制可执行文件和压缩文件等。一般而言,只要是“非文本数据”就应该使用字节流来处理,因为字符流无法保证“非文件数据”的完整性。
输入流代码示例:
输入流代码示例:
截止目前,我们发现字节流和字符流的使用都很类似,除了在处理数据单位的不同之处,还有那些不同呢?实际上,字节流是对文件本身直接进行操作,不需要通过缓冲区;而字符流则要通过缓冲流来操作文件。换句话说,使用字节流时,就算没有执行close()方法关闭字节流的操作,还是可以向文件输出内容的。但是在字符流中,若不执行close()方法,就无法向文件写入内容。当然,不执行close()方法,即不降缓冲区内容刷新到文件,文件为空,但是可以使用flush()强制清除内容。
什么是缓冲区?因为计算机访问外部设备或文件要比直接访问内存慢很多,如果我们每次调用read()或writer()方法访问外部设备或文件,CPU就要花费很多的时间在等待。为此我们开辟一个内存缓冲区的内存区域,当这个缓冲区被装满后,系统才将这个缓冲区的内容一次集中写到外部设备或读取进来给CPU,提高CPU的使用率。
四、缓冲流:BufferedReader类
相比而言,对于从文件读取数据或将数据写入文件,比起对缓冲区的读写要慢得多了。缓冲流把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少系统资源的读写次数来加快程序的执行。
注意:bufferedReader是针对Reader的,是需要与其他字符流配合使用的,不直接针对文件的读取。
使用Buff
4000
eredReader类读文件代码示例:
public static void main(String[] args)
{
String path="G:\\test\\1.txt";
File file=new File(path);
String str=null;
try {
Reader read=new FileReader(file);
BufferedReader bin=new BufferedReader(read);
while ((str = bin.readLine()) != null)
{
System.out.println(str);
}
bin.close();
read.close();
} catch (IOException e) {
System.out.println("读取失败!");
e.printStackTrace();
}
} BufferedWriter类是Writer的子类。与Writer相比,BufferedWriter类主要的改变是重写了flush()方法,该方法确保缓冲区的数据确实被写到输出流中。
使用BufferedWriter类写/追加文件的代码示例:
public static void main(String[] args)
{
String path="G:\\test\\1.txt";
File file=new File(path);
String str[]={"123","234","345"};
try {
Writer writer=new FileWriter(file,true);//追加的形式
BufferedWriter bw=new BufferedWriter(writer);
for(int i=0;i<str.length;i++)
{
bw.write(str[i]);
bw.newLine();//写一个结尾‘\n’,以达到换行的目的
}
bw.close();
writer.close();
System.out.println("写入成功!");
} catch (IOException e) {
System.out.println("写入失败!");
e.printStackTrace();
}
} 五、其他的几个流:
内存操作流:流数据有byte[]和char[]之分,java.io包提供ByteArrayInputStream和ByteArrayOutputStream类,用于实现字节数组的输入和输出。
打印流:可以方便地将各种不同类型的数据打印输出到另一个输出流,PrintStream类可以配合不同的输出流,用来输出数据到各个目的地,如文件、数组等。
Scanner类:方便地控制台中输入数据。
随机访问文件类:RandomAccexxFile类......
顺序输入流:SequenceInputStream类可以把多个输入流串流程一起,合并成一个输入流。
压缩流:为了减少传输时的数据量提供了专门的压缩流,可以将文件或文件夹压缩成ZIP、JAR、GZIP等文件形式。
对象序列化:向一个输出流写入一个对象;而对象的反序列化是指从一个输入流中读取一个对象。
一、文件类
File类不属于Java流系统,但它是文件流进行文件操作的辅助类,File类的对象并不打开文件或目录,而是指定要操作的文件或目录。
使用createNewFile()创建新文件代码示例:
/*使用createNewFile()创建新文件*/ public static void main(String[] args) { String path="G://test//1.txt"; /*另一种写法*/ // String path="G:\\test\\1.txt"; File file=new File(path); try { file.createNewFile(); System.out.println("创建成功!"); } catch (IOException e) { System.out.println("创建失败!"); e.printStackTrace(); } }输出目录中的所有文件代码示例如下:
File file=new File(path); String list[]=file.list(); File listFile[]=file.listFile();File类提供了list()和listFile()两种方法输出一个目录的所有文件。两者之间的不同是:list()方法只返回文件名,没有路径信息;listFile()不但返回文件名称还含有路径信息;
二、字节流
字节流一般用于读取或者写入二进制数据,如图片、音频文件;字符流无法正常处理的二进制可执行文件和压缩文件等。一般而言,只要是“非文本数据”就应该使用字节流来处理,因为字符流无法保证“非文件数据”的完整性。
输入流代码示例:
/*输入流*/ public static void main(String[] args) throws Exception { String path="G:\\test\\1.txt"; File file=new File(path); InputStream input=new FileInputStream(file); byte b[]=new byte[(int)file.length()]; int temp=0; int len=0; while((temp=input.read())!=-1) { b[len]=(byte)temp; len++; } input.close(); System.out.println(new String(b)); }输出流代码示例:(实现文件内容追加功能)
/*输出流*/ public static void main(String[] args) { String path="G:\\test\\1.txt"; File file=new File(path); try { /*以追加的形式输出*/ OutputStream out = new FileOutputStream(file,true); String str="你好"; byte b[]=str.getBytes(); out.write(b); out.close(); System.out.println("Success!"); } catch (IOException e) { System.out.println("fail!"); e.printStackTrace(); } }三、字符流
输入流代码示例:
/*输出流*/ public static void main(String[] args) { String path="G:\\test\\1.txt"; File file=new File(path); try { Reader read=new FileReader(file); //read的类读取数据的单位是字符(char) char c[]=new char[(int)file.length()]; int temp=0; int len=0; //使用while循环读取文件的内容,到达结尾是temp=-1 while((temp=read.read())!=-1) { c[len]=(char)temp; len++; } read.close(); System.out.println(c); System.out.println("读取成功!"); } catch (IOException e) { System.out.println("读取失败!"); e.printStackTrace(); } }输出流代码示例:(实现文件内容追加功能)
/*输入流*/ public static void main(String[] args) { String path="G:\\test\\1.txt"; File file=new File(path); String str="123 "; try { Writer out=new FileWriter(file,true); out.write(str); out.close(); System.out.println("写入成功!"); } catch (IOException e) { System.out.println("写入失败!"); e.printStackTrace(); } }
截止目前,我们发现字节流和字符流的使用都很类似,除了在处理数据单位的不同之处,还有那些不同呢?实际上,字节流是对文件本身直接进行操作,不需要通过缓冲区;而字符流则要通过缓冲流来操作文件。换句话说,使用字节流时,就算没有执行close()方法关闭字节流的操作,还是可以向文件输出内容的。但是在字符流中,若不执行close()方法,就无法向文件写入内容。当然,不执行close()方法,即不降缓冲区内容刷新到文件,文件为空,但是可以使用flush()强制清除内容。
什么是缓冲区?因为计算机访问外部设备或文件要比直接访问内存慢很多,如果我们每次调用read()或writer()方法访问外部设备或文件,CPU就要花费很多的时间在等待。为此我们开辟一个内存缓冲区的内存区域,当这个缓冲区被装满后,系统才将这个缓冲区的内容一次集中写到外部设备或读取进来给CPU,提高CPU的使用率。
四、缓冲流:BufferedReader类
相比而言,对于从文件读取数据或将数据写入文件,比起对缓冲区的读写要慢得多了。缓冲流把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少系统资源的读写次数来加快程序的执行。
注意:bufferedReader是针对Reader的,是需要与其他字符流配合使用的,不直接针对文件的读取。
使用Buff
4000
eredReader类读文件代码示例:
public static void main(String[] args)
{
String path="G:\\test\\1.txt";
File file=new File(path);
String str=null;
try {
Reader read=new FileReader(file);
BufferedReader bin=new BufferedReader(read);
while ((str = bin.readLine()) != null)
{
System.out.println(str);
}
bin.close();
read.close();
} catch (IOException e) {
System.out.println("读取失败!");
e.printStackTrace();
}
} BufferedWriter类是Writer的子类。与Writer相比,BufferedWriter类主要的改变是重写了flush()方法,该方法确保缓冲区的数据确实被写到输出流中。
使用BufferedWriter类写/追加文件的代码示例:
public static void main(String[] args)
{
String path="G:\\test\\1.txt";
File file=new File(path);
String str[]={"123","234","345"};
try {
Writer writer=new FileWriter(file,true);//追加的形式
BufferedWriter bw=new BufferedWriter(writer);
for(int i=0;i<str.length;i++)
{
bw.write(str[i]);
bw.newLine();//写一个结尾‘\n’,以达到换行的目的
}
bw.close();
writer.close();
System.out.println("写入成功!");
} catch (IOException e) {
System.out.println("写入失败!");
e.printStackTrace();
}
} 五、其他的几个流:
内存操作流:流数据有byte[]和char[]之分,java.io包提供ByteArrayInputStream和ByteArrayOutputStream类,用于实现字节数组的输入和输出。
打印流:可以方便地将各种不同类型的数据打印输出到另一个输出流,PrintStream类可以配合不同的输出流,用来输出数据到各个目的地,如文件、数组等。
Scanner类:方便地控制台中输入数据。
随机访问文件类:RandomAccexxFile类......
顺序输入流:SequenceInputStream类可以把多个输入流串流程一起,合并成一个输入流。
压缩流:为了减少传输时的数据量提供了专门的压缩流,可以将文件或文件夹压缩成ZIP、JAR、GZIP等文件形式。
对象序列化:向一个输出流写入一个对象;而对象的反序列化是指从一个输入流中读取一个对象。
相关文章推荐
- Java代码实现对properties文件有序的读写的示例
- Java对xls文件进行读写操作示例代码
- Java文件读写IO/NIO及性能比较详细代码及总结
- 用java读写properties文件的代码
- 输出该目录下指定类型文件(.cs, .java)的个数、文件的总行数、空行数、注释行数、代码行数
- 第七章:输入与输出,给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数。
- java IO总结之字节流操作文件读写(高效)
- STM32读写TXT文件(可追加数据)的示例代码
- java多线程读写同一个文件的代码
- paip.文件读写api php java python总结.txt
- android 向内存中 读写 文件数据 》》》java基础---- 文件输入流,文件输出流
- Java 之 文件读写及性能比较总结
- 个人总结/Binder+AIDL自动生成Java文件中的代码分析
- C语言 文件的随机读写详解及示例代码
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- java代码实现输出指定以.java结尾的文件的绝对路径
- Android读写文件基于Java的文件输入输出流
- java使用IO读写文件总结
- python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
- 【java】 IO读写文件示例