📄 java14.txt
字号:
xml(可扩展标记语言)File类1.File代表了文件和目录2.File类包括了所有的非IO的文件/目录操作1.new File(全路径):包括绝对路径和相对路径2.方法:新建createBweFile() 删除delete() 重命名renameTo() List()->子文件+子目录 ListFiles()->文件数组 存在exists() 大小length() 文件名getName() 路径getPath()-----------------------------------------------------------------------------------------package com.tarena.day14.io;import java.io.File;import java.io.IOException;public class TestFile { public static void main(String[] args) throws IOException { File f1 = new File("/home/soft01/Desktop/"); if(f1.isDirectory()){ //无法确定不存在的file,对象是文件/目录 System.out.println("is directory"); }else if(f1.isFile()){ System.out.println("is file"); } if(!f1.exists()){ f1.mkdirs(); //层层创建 } //把f1下面所有文件都显示出来,不包括子目录 File[] temp1 = f1.listFiles(); for (int i = 0; i < temp1.length; i++) { if(temp1[i].isFile()){ System.out.println(temp1[i]); } } File.createTempFile("aaa", ".txt", f1); //创建临时文件,前缀名必须要三个以上,而且临时文件会在前缀名后面跟上随机数 String[] temp = f1.list(); for (int i = 0; i < temp.length; i++) { System.out.println(temp[i]); } }}----------------------------------------------------------------------------------------- 绝对路径和相对路径绝对路径很直观、清楚,但是很死板,对于代码移植上来说就很不方便相对路径代码移植性很好,做项目通常都用的是相对路径相对路径有以下三个问题需要解决: 1./ \在不同系统下的区别:SUN支持Linux下的"/"通用(在windows下也可以用C:/),还可用File.saperator自动变化分割符 2.相对路径的根: 3.如果进退目录-----------------------------------------------------------------------------------------package com.tarena.day14.io;import java.io.File;public class TestPath { public static void main(String[] args) { File f = new File("./"); System.out.println(f.getPath()); System.out.println(f.getName()); String[] st = f.list(); for (String s : st) { System.out.println(s); }//相对路径不能跨盘符(在Windows下不能C盘找D盘) File ff = new File("../../abc.txt"); if (ff.exists()) { System.out.println("ok"); } }}-----------------------------------------------------------------------------------------Serializable:如果对象想要在流中传递,就要实现对象序列化,否则无法传递做一个类的时候:1.写无参构造(子类,反射)2.实现序列化接口3.是否重写equals和HashCode能被序列化的1.包名2.类名3.属性是个递归,会把所有属性下的属性都序列化不能被序列化的方法和构造-----------------------------------------------------------------------------------------package com.tarena.day14.ser;public class Person implements java.io.Serializable{ private static final long serialVersionUID = 1L; private String name; private int age; private String nations; private transient String sex; //加入关键字transient该属性就不会被序列化 private static Object obj; //Objject没有实现任何接口//static是类级别的,不是对象,所以不能被序列化 public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNations() { return nations; } public void setNations(String nations) { this.nations = nations; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }-----------------------------------------------------------------------------------------package com.tarena.day14.ser;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;public class WriteObject { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("../../person.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); Person p = new Person(); p.setName("zhang"); p.setAge(23); p.setNations("han"); p.setSex("man"); oos.writeObject(p); oos.close(); }}-----------------------------------------------------------------------------------------package com.tarena.day14.ser;import java.io.FileInputStream;import java.io.ObjectInputStream;public class ReadObject { public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream("../../person.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); Person p = (Person)ois.readObject(); ois.close(); System.out.println(p.getName()+","+p.getAge()+"," +p.getSex()+","+p.getNations()); }}-----------------------------------------------------------------------------------------对象序列化是针对对象进行,不是针对声明类型,会对所有的属性(包括属性的属性)递归序列化(有些属性例外)static 属性不会被序列化transient 关键字保护敏感属性不被序列化1.对象序列化解决的就是保证对象在流中正确的传递2.类名,包名,非static/非transient 的属性会被序列化3.方法和构造不能被序列化,还有static/transient 的属性无法序列化 4.serialVersionUID(long)解决序列化版本冲突问题NETWORK(网络)http超文本传输协议ftp文件传输协议telnet远程登录pop3邮件协议TCP传输协议(TCP/IP)UDP用户数据报协议Sokect:套接字,就是带一个IP+端口Server Socket为服务器端服务,只负责客户连接,不负责交互Sokect负责交互-----------------------------------------------------------------------------------------package com.tarena.day14.net;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.ServerSocket;import java.net.Socket;public class TestServer { public static void main(String[] args) throws Exception{ ServerSocket ss = new ServerSocket(7456); System.out.println("begin"); Socket so = ss.accept(); //返回Socket类型 System.out.println("end"); //客户端与服务器端要注意读写一致,一读一写 DataInputStream dis = new DataInputStream(so.getInputStream()); DataOutputStream dos = new DataOutputStream(so.getOutputStream()); String temp = dis.readUTF(); dos.writeUTF("server:"+temp); dis.close(); dos.close(); so.close(); ss.close(); }}-----------------------------------------------------------------------------------------package com.tarena.day14.net;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.Socket;public class TestClient { public static void main(String[] args) throws Exception { Socket so = new Socket("127.0.0.1",7456); DataInputStream dis = new DataInputStream(so.getInputStream()); DataOutputStream dos = new DataOutputStream(so.getOutputStream()); dos.writeUTF("Hello"); System.out.println(dis.readUTF()); dis.close(); dos.close(); so.close(); }}-----------------------------------------------------------------------------------------作业:1.复习前边的内容,多看笔记,代码2.把文件分割器完成3.分版本,写一个基于字符界面的聊天软件 a 引入键盘输入流(只在客户端),能无限次的输入(加入while(true)循环,除非客户输入"bye") b 服务器要能为多次连接服务(串行),accept()要放入死循环(此时SS不需要close()) c 利用线程实现并行,多人同时连接/说话(服务器),但是不需要多人交互 d 把多人说的话统一放入同一个变量,发变量,就实现了多人的聊天
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -