IO流
通过IO流技术,可以操作本地或者其他主机上的文件
1. IO流的分类
- 字节流:可以处理任意文件
- 字符流:专门处理文本文件
2. 字符流写一个文本文件
使用FileWriter类,写文本文件,使用write方法写数据
flush方法,刷新缓冲区中的字符,刷新到文件中
关闭资源
3. 字符流读取一个文本文件
使用FileReader类,读取文本文件,使用read方法读数据放到数组中,将数组变成字符串输出
关闭资源
4. 有缓冲区对象,提高流的读写效率
字符流缓冲区对象:BufferedReader、BufferedWriter
5. 转换流
InputInstreamReader 字节转字符
OutputStreamWriter 字符转字节
例子:将终端的输入输出到E:\conPut.txt文件中
import java.io.*;
public class Demo {
public static void main(String[] args) throws Exception{
FileOutputStream fo = new FileOutputStream("E:\\conPut.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));
String str = "";
while((str = br.readLine()) != null) {
if(str.equalsIgnoreCase("EOF")) {
break;
}
bw.write(str,0,str.length());
bw.newLine();
bw.flush();
}
fo.close();
br.close();
bw.close();
}
}
- 打印流
不会抛出IO异常
打印流:只操作数据目的,不操作数据源 - File类
对文件进行操作,如列出文件操作
import java.io.File;
/**
*递归列出文件
*/
public class Demo {
public static void main(String[] args) throws Exception{
File file = new File("E:\\java");
recursiveFile(file);
}
public static void recursiveFile(File file) {
if(file.isFile()) {
System.out.println(" " + file.getName());
}
if(file.isDirectory()) {
File[] files = file.listFiles();
System.out.println(file.getName());
for(File f : files) {
recursiveFile(f);
}
}
}
}
网络
- UDP
- 面向无连接
- 不可靠的协议
- 连接效率高
- 数据限制在64k以内
*UDP接受端
*/
import java.net.DatagramSocket;
import java.net.DatagramPacket;
public class UdpServer {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000);
DatagramPacket dp = new DatagramPacket(data,data.length);
byte[] data = new byte[1024];
while(true) {
ds.receive(dp);
int len = dp.getLength();
System.out.println(new String(data,0,len));
ds.close();
}
}
}
/**
*UDP发送端
*/
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;
public class UdpClient {
public static void main(String[] args) throws Exception{
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data,data.length,InetAddress.getByName("127.0.0.1"),10000);
DatagramSocket ds = new DatagramSocket();
while(true) {
System.in.read(data);
ds.send(dp);
ds.close();
}
}
}
- TCP
- TCP面向连接
- 连接效率低
- 安全可靠的协议
- 适合大数据的传输
/**
*文件上传客户端
*/
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("E:\\me.txt");
Socket socket = new Socket("127.0.0.1",10000);
OutputStream outS = socket.getOutputStream();
byte[] data = new byte[1024];
int len;
while((len = fis.read(data)) != -1) {
outS.write(data,0,len);
outS.flush();
}
outS.close();
socket.close();
fis.close();
}
}
/**
*文件上传服务器端
*/
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws Exception{
FileOutputStream fos = new FileOutputStream("D:\\me.txt");
ServerSocket s = new ServerSocket(10000);
Socket socket = s.accept();
InputStream ins = socket.getInputStream();
byte[] data = new byte[1024];
int len;
while((len = ins.read(data)) != -1) {
fos.write(data,0,len);
fos.flush();
}
ins.close();
socket.close();
fos.close();
}
}