在程序中所有的数据都是以流的方式进行传输和保存的,程序需要数据的时候要使用输入流读取数据,而程序需要将一些数据保存起来则需要使用输出流来完成。
在JAVA.IO包中操作文件内容的主要有两大类:字节流,字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream,输入主要使用InputStream,在字符流中输出主要使用Writer类完成,输入只要使用Reader类完成。
主要的操作流程如下:
- 使用FILE类打开一个文件
- 通过字节流或者字符流的子类,指定输出的位置。
- 进行读/写操作
- 关闭输入/输出
字节流输出操作代码:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileNotFoundException;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.io.OutputStream;
-
-
public class lianxi043 {
-
public static void main(String[] args){
-
-
File f = new File("F:\\aaa.txt");
-
-
try {
-
OutputStream out = new FileOutputStream(f, true);
-
-
String ss = "\r\nhello1111";
-
byte[] b = ss.getBytes();
-
for(int i=0;i<b.length;i++){
-
out.write(b[i]);
-
}
-
-
out.close();
-
-
} catch (FileNotFoundException e) {
-
-
e.printStackTrace();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
-
-
}
-
}
字节流输入操作代码:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.IOException;
-
import java.io.InputStream;
-
-
public class lianxi044 {
-
public static void main(String[] args){
-
File f = new File("f:\\abc.txt");
-
try {
-
InputStream in = new FileInputStream(f);
-
byte[] b = new byte[(int)f.length()];
-
in.read(b);
-
System.out.println(new String(b));
-
in.close();
-
} catch (FileNotFoundException e) {
-
-
e.printStackTrace();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
}
-
}
一位一位读进来
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.IOException;
-
import java.io.InputStream;
-
-
public class lianxi044 {
-
public static void main(String[] args){
-
File f = new File("f:\\abc.txt");
-
try {
-
InputStream in = new FileInputStream(f);
-
byte[] b = new byte[(int)f.length()];
-
for(int i=0;i<b.length;i++){
-
b[i] =(byte)in.read();
-
}
-
-
System.out.println(new String(b));
-
in.close();
-
} catch (FileNotFoundException e) {
-
-
e.printStackTrace();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
}
-
}
如果不知道文件的大小则:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.IOException;
-
import java.io.InputStream;
-
-
public class lianxi044 {
-
public static void main(String[] args){
-
File f = new File("f:\\abc.txt");
-
try {
-
InputStream in = new FileInputStream(f);
-
byte[] b = new byte[1024];
-
int len =0;
-
int tem=0;
-
while((tem = in.read())!=-1){
-
b[len] = (byte)tem;
-
len++;
-
}
-
-
-
System.out.println(new String(b,0,len));
-
in.close();
-
} catch (FileNotFoundException e) {
-
-
e.printStackTrace();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
}
-
}
字符流输出:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
import java.io.Writer;
-
-
public class lianxi045 {
-
-
-
-
-
public static void main(String[] args) {
-
File f = new File("f:\\abc.txt");
-
try {
-
Writer w = new FileWriter(f);
-
String ss = "aaaaaaaaaaaaa";
-
w.write(ss);
-
w.close();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
-
}
-
-
}
字符流读取数据:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileReader;
-
import java.io.IOException;
-
import java.io.Reader;
-
-
public class lianxi045 {
-
-
-
-
-
public static void main(String[] args) {
-
File f = new File("f:\\abc.txt");
-
try {
-
Reader r = new FileReader(f);
-
char[] c = new char[1024];
-
r.read(c);
-
System.out.println(new String(c));
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
-
}
-
-
}
字节流与字符流的区别:
字节流在操作的时候本身不会用到缓冲区,是与本件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。
在所有的硬盘上保存的文件或者是进行传输的时候是以字节的方式进行的。包括图片也是按字节完成的,而字符只有在内存中才会形成,使用字节的操作是最多的。
复制文件的小程序:
-
package lianxijihe;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileNotFoundException;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.OutputStream;
-
-
public class lianxi046 {
-
public static void main(String[] args){
-
if(args.length!=2){
-
System.out.println("输入的格式不对");
-
System.exit(1);
-
}
-
File f1 = new File(args[0]);
-
File f2 = new File(args[1]);
-
if(!f1.exists()){
-
System.out.println("源文件不存在");
-
System.exit(1);
-
-
}
-
try {
-
InputStream in = new FileInputStream(f1);
-
OutputStream out = new FileOutputStream(f2);
-
int temp =0;
-
while((temp=in.read())!=-1){
-
out.write(temp);
-
}
-
in.close();
-
out.close();
-
-
} catch (FileNotFoundException e) {
-
-
e.printStackTrace();
-
} catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
-
}
-
}
IO-03字节流字符流,布布扣,bubuko.com
IO-03字节流字符流
原文:http://blog.csdn.net/u012897654/article/details/25733065