IO流与网络

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();
    }

}
  1. 打印流
    不会抛出IO异常
    打印流:只操作数据目的,不操作数据源
  2. 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);
            }

        }
    }

}

网络

  1. 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();
        }

    }
}
  1. 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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值