javaIO
File 类表示一个目录或文件夹 ”\”的转义字符是 ”\\”
File. Separator判断操作系统自动自动切换目录分隔符
File.exist是 判断文件或目录是否存在
JavaIO采用装饰者模式
java输入输出是站在内存的角度来看的
java输入输出是以流的方式表示的,把文件读如内存是输入流,把文件从内存写入硬盘称为输出流,java流又分为字符流和字节流,字节流是处理二进制文件,字符流是处理字符文件,java字节输入流常用的有FileInputStream文件输入流,BufferedInputStream 带缓冲的字节输入流和DataInputStream 数据输入流。字节输出流有FileOutputstream 文件输出流,BufferedOutputStream 带缓冲的字节输出流, DataOutputStream 数据输出流。字符流也分为输入流和输出流,字符输入流有InputStreamReader ,FileReader,BufferedReader,输出流有 InputStreamWriter,FileWriter,BufferWriter,其中InputStreamReader和OutputstreamWriter又称为转换流InputStreamReader 是将字节流转换为字符流,OutputstreamWriter是将字符流转换为字节流。
使用输入和输出流有是速度太慢,可以封装成缓冲流加快速度
BufferedInputstream in = new BufferedInputstream(newFileInputStream(“文件路径名”));
BufferedOutputStreamout= new BufferedOutputStream(new FileOutputStream(“文件路径名”));
FileInputStream inputStream = new FileInputStream(sourceFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
FileOutputStream outputStream = new FileOutputStream(newFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
int b = 0;
byte[] buffer = new byte[2048];
long startTime = System.currentTimeMillis();
while(b != -1) {
b = bufferedInputStream.read(buffer);
bufferedOutputStream.write(buffer,0,buffer.length);
}
System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");
bufferedInputStream.close();
bufferedOutputStream.flush();
bufferedOutputStream.close();
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(“文件路径名”))); 或 BufferedReader in= new BufferedReader(new FileReader(“文件路径名”));
BufferWriter out =new BufferWriter(new InputStreamWriter(new FileInputStream(“文件路径名”))); 或 BufferWriter out = new BufferWriter(FileWriter(“文件路径名”));
当文件读取或写入完毕需要关闭流调用close()方法关闭如果是缓冲流关闭缓冲流即可,嵌套的流会自动关闭,写入流写入完成后需要刷新一下内存将没有写入的内容强制刷入文件调用flush();方法
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\a.txt")));
String str = "";
while((str = reader.readLine()) != null) {
System.out.println(str);
}
reader.close();
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\a.txt",true)));
w.write("xxxxxxxxxxxx");
w.flush();
w.close();
序列化对象 :序列化对象就是将对象以二进制的形式保存或者在网络上传输
序列化对象 :ObjectInputStream();反序列化对象ObjectOutputStream
序列化对象是要求对象必须实现Serializable接口,这个接口没有属性和方法,他是序列化的一个标示,未实现Serializable接口的类不能参与序列化,如果父类序列化那么子类必然是可序列化的,transient 关键字标示一个属性,表示这个属性不参与序列化。
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private transient float score;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
}
序列化对象User user = new User();
user.setId(1);
user.setName("Tom");
user.setScore(98);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\user.dat"));
oos.writeObject(user);
oos.flush();
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\user.dat"));
User user2 = (User) ois.readObject();
ois.close();
System.out.println(user2.getId());
System.out.println(user2.getScore());
System.out.println(user2.getName());
设置标准输入和输出
System.out是标准输出输出到屏幕 System.setOut(new PrintStream(“文件路径名”));
将控制台输出内容输出到文件
System.in是标准输入输入,从键盘输入System.setIn(new FileInputStream(““文件路径名””));
读取文件