JAVA的IO流 和网络编程 超详细每行代码都有备注
IO流: { 文件的操作: f1.getAbsolutePath();//获取绝对路径 f1.getPath();//获取相对路径 f1.getName();//获取名称 f1.getParent();//获取上层目录路径 无返回null f1.length();获取文件长度(字节数) f1.lastModified();//获取最后修改时间,毫秒值
f1.isDirectory();//判断是否为文件目录(就是里面还有值) f1.isFile() ;// 判断是否是文件 f1.exists(); //判断文件是否存在 f1.canRead(); //判断是否可读 f1.canWrite(); //判断是否可写 f1.isHidden(); //判断是否隐藏 f1.createNewFile(); //创建文件如果此文件不存在了就返回true 注意是创建文件其他都是创建文件夹 f1.mkdir(); //创建文件夹如果文件夹存在就不创建 f1.delete(); //删除f1文件路径下的文件 f2.mkdirs();//创建文件夹如果文件夹不存在就不创建 如果路径不存在就创造路径
File f4=new File("D:java1"); String[] list = f4.list(); //获取该目录下的所有文件 File[] file=f4.listFiles();//获取指定目录下的所有文件目录带c://
FileSystemView fsv = FileSystemView.getFileSystemView(); File com=fsv.getHomeDirectory(); //获取桌面路径
int len; byte[] by=new byte[1024] while ((a1=b1.readLine())!=null) { b2.write(by,0,len); } //数据的读写代码 *字符流(文本操作): FileReader f1=new FileReader("tt1.txt"); //写出流 FileWriter f2=new FileWriter("tt1.txt",true); //第2个如果为true那么就是往后追加 如果为flase就覆盖着写 写出的时候不存在会自动创建 读入流
*字节流(图片,视频操作): FileInputStream f3=new FileInputStream("tt1.txt"); //字节写出 FileOutputStream f4=new FileOutputStream("tt1.txt",true); //字节读入
缓冲流(增加速度): BufferedReader b1=new BufferedReader(new FileReader(f1));//缓冲写出流(文本文件) BufferedWriter b2=new BufferedWriter(new FileWriter(f2));//缓冲读入流(文本文件)
BufferedInputStream cin=new BufferedInputStream(new FileInputStream(f3)); //缓冲写出流 (图片,视频操作) BufferedOutputStream cout=new BufferedOutputStream(new FileOutputStream(f4));//缓冲读入流 (图片,视频操作)
转换流(字节转字符<——>字符转字节): InputStreamReader n1=new InputStreamReader(new FileInputStream(f3),"UTF-8"); // 默认字符为系统自己设置 字节流-->字符流
InputStreamReader cin=new InputStreamReader(new FileInputStream(f3),"utf-8"); //以utf-8的方式写出 字符流-->字节流 OutputStreamWriter cout=new OutputStreamWriter(new FileOutputStream(f4),"gbk"); //以gbk的方式读入 字符流-->字节流
可读可写的(RandomAccessFile)流: RandomAccessFile r1=new RandomAccessFile(new File("图9.jpg"),"r"); //只读的方式 写出文件 RandomAccessFile r2=new RandomAccessFile(new File("图10.jpg"),"rw"); //可写出可读入的方式 读写文件
RandomAccessFile r3=new RandomAccessFile(new File("f1.txt"),"rw"); //可读可写的方式 操作txt类型文件 r3.seek(3);//吧指针移动读出位置的第3个地方 r2.write("abcd".getBytes()); //覆盖操作写是从头开始覆盖 原来是 1235678wqert 覆盖前面之后操作完成;abcd5678wqert
不可打开的文件类(ByteArrayOutputStream)流用于网络编程: ByteArrayOutputStream baos=new ByteArrayOutputStream(); //用来写入字符和字节文件
标准输入控制台(了解就行): InputStreamReader isr=new InputStreamReader(System.in);//标准从键盘读入 BufferedReader br=new BufferedReader(isr); //流包起来 String data= br.readLine();//数据读出 输出: FileOutputStream fos=new FileOutputStream(new File("ff2_xg.txt")); PrintStream ps=new PrintStream(fos,true);//true代表覆盖操作 System.setOut(ps); //修改打印流吧打印出去的地方修改成输入到文件里面
流操作最后都必须执行 f1.close //流关闭操作
}
网络编程:TCP UDP URL { 获取传输过来的IP地址:sockt.getInetAddress().getHostAddress();
InetAddress inet1=InetAddress.getByName("127.0.0.1"); //写入ip地址 返回 /127.0.0.1 InetAddress.getByName("www.baidu.com"); //写入域名 返回: www.baidu.com/112.80.248.… InetAddress.getByName("localhost"); //写入本机 返回: localhost/127.0.0.1 本机地址 InetAddress.getLocalHost() ; //写入本机 返回: dzqdb1 /192.168.159.1 我现在电脑所对应局域网中的ip地址和名字 InetAddress.getByName("dzqdb1") ; //写入本机名字 返回: dzqdb1 /192.168.159.1 通过名字查找ip地址 吧域名和名字分开: System.out.println("5号的名字为:"+inet5.getHostName()); //获取名字 System.out.println("5号的ip地址为:"+inet5.getHostAddress()); //获取ip地址
TCP网络编程(传输文字):三次握手,四处挥手保证数据的传输稳定性 客户端: Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),4444); //传输进来服务端的ip地址和端口号 OutputStream os = socket.getOutputStream(); //传输字节读入流 os.write("你好啊".getBytes()); //数据传输到服务器 getBytes() 转换成byte字节流 socket.shutdownOutput();//告知服务器我数据已经传输完了,不在输出数据了 不写此语句导致服务器端一直等待客户端做出回应 socket.close();//关闭连接 os.close();//关闭文件流
服务端: ServerSocket ss = new ServerSocket(9999);//自己服务器的地址 Socket sockt=ss.accept(); //(写出获取)接收来自客服端的sockt数据 有线程阻塞必须得等到数据传输进来之后才会往下执行 InputStream is = sockt.getInputStream(); //(读入)传输进来的数据 System.out.println("收到了来自于"+sockt.getInetAddress().getHostAddress()");//获取传输过来的ip地址 ByteArrayOutputStream baos=new ByteArrayOutputStream();//吧所有字符串都读取进来然后读取完成之后再拼接成一个字符串 byte[] buff=new byte[5]; int len; while((len= is.read(buff))!=-1) { baos.write(buff,0,len); } System.out.println(baos.toString());//吧传输过来的字节流打印出来 is.close(); //读入关闭 sockt.close();//关闭接收数据 baos.close(); //关闭流 ss.close(); //关闭服务器
TCP网络编程(传输图片.视频等): 客户端: Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),4444); //服务端的ip地址,端口 OutputStream out = socket.getOutputStream();//输出流 FileInputStream stream = new FileInputStream(new File("C:\\Users\\hbl\\Desktop\\lo流\\图9.jpg"));//需要读取的文件 byte[] by=new byte[1024]; int len; while((len=stream.read(by))!=-1) { out.write(by,0,len); } socket.shutdownOutput();//告知服务器我数据已经传输完了,不在输出数据了 不写此语句导致服务器端一直等待客户端做出回应 //关闭操作
服务端: ServerSocket ss = new ServerSocket(9999);//自己服务器的地址 Socket sockt=ss.accept(); //接收来自客服端的sockt数据 InputStream is = sockt.getInputStream(); //读入传输进来的数据 (图片和视频版)
byte[] buff=new byte[5]; int len; ByteArrayOutputStream baos=new ByteArrayOutputStream();//吧所有字符串都读取进来然后读取完成之后再拼接成一个字符串 while((len= is.read(buff))!=-1) { baos.write(buff,0,len); } System.out.println(baos.toString());//输出 //关闭流操作
服务端回应数据操作: 回应数据(在代码后面写): OutputStream os=accept1.getOutputStream(); os.write("数据我已经收到,非常好看!".getBytes());//转换字节发送给服务器
DatagramSocket socket=new DatagramSocket(); //连接使用UDP方式
使用UDP网络格式发送数据:(不管对方有没有接收到都吧包发给对方) 客户端: DatagramSocket socket=new DatagramSocket(9999); //指定端口号 byte[] buffer=new byte[100]; DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length); //接收数据 socket.receive(packet);//等待数据传输过来接收数据 System.out.println(new String(packet.getData(),0,packet.getLength())); //第一个是数据,第2个是从哪里开始,第三个是数据的长度
socket.close();
服务端: DatagramSocket socket=new DatagramSocket(); //连接使用UDP方式 String str="我是以UDP方式发送的导弹"; byte[] data=str.getBytes(); //转换成字节流
DatagramPacket packet=new DatagramPacket(data,0,data.length,InetAddress.getByName("127.0.0.1"),9999); // 封装的数据包 发送的文件/从哪开始发/到那结束发送 服务器ip地址、端口号
socket.send(packet); //发送数据包 socket.close();//关闭发送
}