一 File类

1.1 File类概述

  1. File类位于java.io包下
  2. File类对象可以表示一个文件,也可以表示一个文件目录,是一种抽象的表现形式,与平台无关
  3. File类中有涉及到文件及文件目录的新建,重命名,删除,绝对路径,长度等操作,但是不能操作文件内的内容,不能读取和插入文件内容,必须使用IO流。
  4. File类对象常是作为IO流的端点出现的,从代码上来看的话,File类对象经常作为参数传递给流的构造器

1.2 File类常用的构造器

1)public File(String pathname):以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

  1. @Test
  2. public void test1(){
  3. File file1 = new File("D:\\io\\hello.txt"); // 绝对路径
  4. File file2 = new File("abc.txt"); // 相对路径
  5. File file3 = new File("d:/io"); // 绝对路径
  6. }
  7. public static void main(String[] args) {
  8. File file2 = new File("abcd.txt");
  9. }

2)public File(String parent, String child):以parent为父路径,child为子文件路径创建File对象。
3)public File(File parent, String child):根据一个父File对象和子文件路径创建File对象。

  1. @Test
  2. public void test2(){
  3. File file1 = new File("d:\\io","hello.txt");
  4. File file2 = new File("d:/io");
  5. File file3 = new File(file2,"hello.txt");
  6. }

1.3 路径分隔符

1)路径中的每级目录之间用一个路径分隔符隔开。
2)路径分隔符和系统有关:

  • Windows 和 DOS 系统默认使用“\”来表示,但是也支持’/‘
  • Unix 和 URL 使用“/”来表示

3)Java程序支持跨平台运行,因此路径分隔符要慎用。
4)Java默认在File类中有 public static final String ``**separator** 系统常量,动态表示分隔符。

  1. File file1 = new File("d:\\info.txt");
  2. File file2 = new File("d:" + File.separator + "atguigu" + File.separator + "info.txt");
  3. File file3 = new File("d:/atguigu");

1.4 File类常用方法

1)File类的获取功能

  1. public String getAbsolutePath() // 获取绝对路径
  2. public File getAbsoluteFile() // 获取绝对路径表示的文件
  3. public String getPath() // 获取相对路径
  4. public String getName() //获取当前File的文件名称
  5. public String getParent() // 获取上层文件目录路径。若无,返回null
  6. public long length() // 获取文件长度(即:字节数),不能获取目录的长度。1kb=1024字节,1字节=8bit(位)
  7. public long lastModified() // 获取最后一次的修改时间,毫秒值

2)表示目录时的常用方法

  1. public String[] list() // 获取指定目录下的所有文件或者文件目录的名称数组
  2. public File[] listFiles() // 获取指定目录下的所有文件或者文件目录的File数组

3)重命名功能

  1. public boolean renameTo(File dest) // 把文件重命名为指定的文件路径

4)判断功能

  1. public boolean isDirectory() // 判断是否是文件目录
  2. public boolean isFile() // 判断是否是文件
  3. public boolean exists() // 判断是否存在
  4. public boolean canRead() // 判断是否可读
  5. public boolean canWrite() // 判断是否可写
  6. public boolean isHidden() //判断是否隐藏

5)创建功能

  1. public boolean createNewFile() // 创建文件。若文件存在,则不创建,返回false
  2. public boolean mkdir() // 创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
  3. public boolean mkdirs() // 创建文件目录。如果上层文件目录不存在,一并创建

6)删除功能

  1. public boolean delete() // 删除文件或者文件夹。Java中的删除不走回收站,如果删除的目录不为空,则删除失败

二 IO流

2.1 原理

1)IO是Input/Output的缩写,IO技术是非常实用的技术,用于处理设备之间的数据传输,比如读写文件,网络通信等。
2)在Java中,数据的输入输出操作,都是以流的方式来进行的。
3)Java.io包下提供了各种接口和类,用来获取不同种类的数据,并提供了标准的方法进行输入输出操作。
4)input:输入,读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
5)output:输出,将程序(内存)数据输出到磁盘、光盘等存储设备中。

2.2 IO流的分类

1)按照操作的数据单位来分

  1. 字符流(16 bit)
  2. 字节流(8 bit)

2)按照数据的流向来分

  1. 输入流
  2. 输出流

3)按照流的角色不同来分

  1. 节点流
  2. 处理流

四个抽象基类:①InputStream OutputStream ReaderWriter
Java的IO共涉及40多个类,实际上非常规则,都是从抽象基类中派生出来的。
由这四个抽象基类派生的子类都是以其父类名作为后缀

2.3 节点流

直接从数据源或目的地读写数据
1)文件:①FileInputStream,②FileOutputStream,③FileReader,④FileWriter
2)字符串:①StringReader,②StringWriter
3)数组:①ByteArrayInputStream ②ByteArrayOutputStream ③CharArrayReader ④CharArrayWriter
4)管道:①PipedInputStream ②PipedOutputStream ③PipedReaderPipedWriter

处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

三 网络编程

1)网络编程是指在运行多个设备之间的程序,进行通过网络交流。 2)Java下的java.net包下提供的API包含了类和接口,他们提供在底层次的通信细节,我们可以直接使用这些类和接口,来专注解决问题。而不用关注于通信细节。

3.1 java.net包中提供了两种常见的网络协议的支持

  • TCP:传输控制协议,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称为TCP/IP
  • UDP:用户数据协议,一个无连接的协议,提供了应用程序之间要发送的数据包

3.2 Socket编程

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。 当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。 java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。

1)服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口进行通信
2)服务器调用 ServerSocket 类的 accept() 方法,将一直等待,知道客户端连接到服务器上给定的端口
3)服务器正在等待时,一个客户端实例化一个 Socket 类对象,指定服务器的ip和端口来请求连接
4)Socket 类的构造器试图将客户端连接到指定的服务器和端口号,如果建立通信成功,则在客户端创建一个 Socket 对象进行通信
5)在服务器端,accept() 方法返回服务器上一个新的 Socket 引用,该Socket 连接到客户端的Socket
6)建立连接后,通过IO进行通信,每个Socket都会有一个输入流和一个输出流,客户端的输出流连接到服务端的输入流,服务端的输出流连接到客户端的输入流
7)TCP是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送

3.3 ServerSocket类

服务器应用程序通过使用 java.net.ServerSocket 类以获取一个端口,并且侦听客户端请求。
1)ServerSocket类有四个构造方法

序号 方法描述
1 public ServerSocket(int port) throws IOException
创建绑定到特定端口的服务器套接字。
2 public ServerSocket(int port, int backlog) throws IOException
利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
3 public ServerSocket(int port, int backlog, InetAddress address) throws IOException
使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
4 public ServerSocket() throws IOException
创建非绑定服务器套接字。

2)常用的方法

序号 方法描述
1 public int getLocalPort()
返回此套接字在服务端绑定侦听的端口号。
2 public Socket accept() throws IOException
侦听并接受到此套接字的连接。
3 public void setSoTimeout(int timeout)
通过指定超时值启用/禁用 SO_TIMEOUT,以毫秒为单位。
4 public void bind(SocketAddress host, int backlog)
将 ServerSocket 绑定到特定地址(IP 地址和端口号)。

3.4 Socket类

java.net.Socket 类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个 Socket 对象通过实例化 ,而 服务器获得一个 Socket 对象则通过 accept() 方法的返回值。

1)Socket类的五个构造器

序号 方法描述
1 public Socket(String host, int port) throws UnknownHostException, IOException.
创建一个流套接字并将其连接到指定主机上的指定端口号。
2 public Socket(InetAddress host, int port) throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
3 public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.
创建一个套接字并将其连接到指定远程主机上的指定远程端口。
4 public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
5 public Socket()
通过系统默认类型的 SocketImpl 创建未连接套接字

2)常用方法

序号 方法描述
1 public void connect(SocketAddress host, int timeout) throws IOException
将此套接字连接到服务器,并指定一个超时值。
2 public InetAddress getInetAddress()
返回套接字连接到服务端的地址。
3 public int getPort()
返回此套接字连接到的远程端口。
4 public int getLocalPort()
返回此套接字绑定到的本地端口。
5 public SocketAddress getRemoteSocketAddress()
返回此套接字连接的端点的地址,如果未连接则返回 null。
6 public InputStream getInputStream() throws IOException
返回此套接字的输入流。
7 public OutputStream getOutputStream() throws IOException
返回此套接字的输出流。
8 public void close() throws IOException
关闭此套接字。

3.5 InetAddress类

这个类表示互联网协议(IP)地址。

1)常用方法

序号 方法描述
1 static InetAddress getByAddress(byte[] addr)
在给定原始 IP 地址的情况下,返回 InetAddress 对象。
2 static InetAddress getByAddress(String host, byte[] addr)
根据提供的主机名和 IP 地址创建 InetAddress。
3 static InetAddress getByName(String host)
在给定主机名的情况下确定主机的 IP 地址。
4 String getHostAddress()
返回 IP 地址字符串(以文本表现形式)。
5 String getHostName()
获取此 IP 地址的主机名。
6 static InetAddress getLocalHost()
返回本地主机。
7 String toString()
将此 IP 地址转换为 String。