Java的IO操作简单回忆
这次写一下JAVA的IO。
一,首先明确一点:所有字节输入流的父类是java.io.InputStream,所有字节输出流的父类都是jav.io.OutputStream.
1.文件的读和写 使用FileOutputStream和FileInoutStream;
写文件:
FileOutputStream fos=new FileOutputStream("c:\\wenku.txt");
String str="you are cool";
fos.write(str.getBytes());
fos.close();
很明显,首先打开文件并返回fos这个对象,把字符串getBytes()成字节就可以用fos的write写入了。
还可以使用PrintStream来写文件
PrintStream ps=new PrintStream(new FileOutputStream("c:\\wenku.txt"));
String str="you are cool";
ps.println(str);
ps.close();
千万别以为这时打印到屏幕。其实是写入文件了。(仔细想想文件和屏幕都是一种输出是不是,都是把内存里的东西放出来了)
读文件:
File file=new File("c:/wenku.txt");
FileInputStream fis=new FileInputStream(file);
byte[] data=new byte[(int)file.length()];
fis.read(data);
fis.close();
String msg=new String(new String(data));
System.out.println(msg);
也很清晰,先实例化一个fis对象,因为是字节流嘛,建一个字节数组data[],fis.read(data)这就对到字节数组了。然后就是把字节数组转换成字符串来输出到屏幕就OK了。
2.对象的读写 使用ObjectInputStream和ObjectOutputStream
打开文档 ObjectOutputStream类的最常用的构造函数是:
public ObjectOutputStream(OutputStream out) throws Exception
传入一个OutputStream对象,实例化ObjectOutputStream对象,很显然,如果传入的是FileOuutputStream.则存入文件。这也是装饰模式的运用
写入文件:
假设一个存在的类Person,他必须继承Serializable.即 public class Person implements Serializable{......... } 。
File file=new File("c:\\wenku.txt");
FileOutputStream fos=new FileOutputStream(file);
ObjectOutputstream oos=new ObjectOutputStream(fos);
Person per=new Person("man","Mike",19);
fos.wrteObject(per);
fos.close();
oos.close();
和printstream差不多啦。 就是 ObjectOutputstream oos=new ObjectOutputStream(new FileOutputStream(new File("c:\\wenku.txt")));
读入文件
Person per=null;
ObjectIntputstream ois=new ObjectInputStream(new FileInputStream(new File("c:\\wenku.txt")));
per=(Person)ois.readObject();
二,所有字符输入流的父类都是java.io.Reader,所有字符输出流的父类都是java.io.Writer。
1.写文件
FileWriter fw=new FileWriter("c:\\wenku.txt");
String str="you are cool";
fw.write(str);
fw.close();
特别注意要close(),否则可能无法写入。
2.读文件
FileReader fr=new FileReader(new File("c:\\wenku.txt");
char[] data=new char[(int)file.length()];
fr.read(data);
fr.close();
String msg=new String(new String(data));
System.out.println(msg);
使用BufferedReader读取文件
BufferedReader br=new BufferReader(new FileReader(new File("c:\\wenku.txt")));
while(true){
String str=br.readLine();
if(str==null){ break; }
System.out.println(str);
}
br.close();
三,键盘输入
BufferedReader br=new BufferedReader( new InputStreamReader(System.in);
String str=br.readLine();
System.out.println(str);
InputStreamReader就像是BufferedReader和InputStream及其子类的中介。
四,网络编程常用:
socket的TCP编程:
用BufferedReader和PrintStream
1,接收消息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String str=br.readLine();
2.发出消息
OutputStream os=socket.getOutputStream();
PrintStream ps=new PrintStream(os);
String str="you are cool";
ps.println(str);
使用DataInputStream和DataOutputStream
DataInputStream dis=new DataInputStream (socket.getInputStream());
DataOutputStream dos=new DataOutputStream (socket.getOutputStream());
接受信息
String str=new String(dis.readUTF());
taMsg.append(str+"\n");
发出信息
dos.writeUTF(""+tfMsg.getText());
还有就是DatagramPacked的UDP编程:
客户端向服务器发送消息:
DatagramPacket ds=new DatagramSocket();
InetAddress add=InetAddress.getByName("127.0.0.1");
ds.connect(add,9999);
String msg="hello";
byte[] data=msg.getBytes();
DatagramPacket dp=new DatagramPacket(data,data.length);
ds.send(dp);
服务器接受消息并打印:
DatagramSocket ds=new DatagrameSocket(9999);
byte[] data=new byte[255];
DatagramPacket dp=new DatagramPacket(data,data.length);
ds.receive(dp);
String msg=new String(dp.getData(),0,dp.getLength());
System.out.println("done"+msg);
看看几个类的关系