JAVA的IO流 和网络编程 超详细每行代码都有备注

162 阅读5分钟

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();//关闭发送  

}