文章目录
Java常用类
String类
String类在java.lang包中,是Java专门提供用来处理字符串的类,由于java.lang包中的类是默认被引入的,因此程序可以直接使用String类。
String类用来创建一个字符串变量,字符串变量是对象。
方式一:
String str="你好";
方式二:
String str2 = new String("你好");
使用"+"号将两个字符串连接在一起
String str = new String("世界"+"你好");
需要注意字符串变量的改变只是改变了指向的内存地址,并不会对实际字符串进行修改,字符串在内存中是以常量的形式存在,所以如果频繁对String类进行修改就会导致内存中存在大量的垃圾数据。所以常使用StringBuffer类来存储需要频繁改变的字符串。
常用方法:
- public int length( ):获取一个字符串的长度
- public boolean equals(String s):比较当前字符串对象的实体是否与参数s指定的字符串实体相同
- public boolean startsWith(String s):判断当前字符串对象的前缀(后缀)是否为参数s指定的字符串
- public boolean contains(String s):判断当前字符串对象是否含有参数指定的字符串s
- public int indexOf(String s):从当前字符串的头开始检索字符串s,并返回首次出现s的位置
- public String substring(int startpoint):获得一个当前字符串的字串
- public String trim():得到一个去掉前后空格后的字符串对象
- public char[] toCharArray():将字符串中的全部字符存放到一个字符数组中
- public byte[] getBytes():使用平台默认的字符编码,将当前字符串转化为一个字符数组
StringBuffer类
StringBuffer类,该类能够创建可修改的字符串对象,也就是说,该类对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符序列。
举例:
StringBuffer buffer = new StringBuffer("我喜欢");
buffer.append("玩篮球"); //将字符串连接
常用方法:
- public StringBuffer append(String s):将指定的字符串追加到此字符序列
- public StringBuffer reverse():将此字符序列用其反转形式取代
- public delete(int start,int end):移除此序列的子字符串中的字符
- public insert(int offset,int i):将int参数的字符串表示形式插入此序列中
- public insert(int offset,String str):将str参数的字符串插入此序列中
- public replace(int start,int end,String str):使用给定的str字符串替换此序列中指定范围内的字符
- public int capacity():返回当前容量
- public int length():返回长度(字符数)
File类
java.io.File类用于文件或目录的描述信息,例如生成新目录、修改文件名、删除文件、判断文件是否存在等。
该类对文件系统中文件以及文件夹进行了封装,可以通过对象的思想来操作文件和文件夹。包括文件名、文件长度、最后修改时间等一系列属性。
常用构造方法:
- File(String pathname):创建一个指定的文件。
- File(String parent,String child):在指定的目录下创建文件。
- File(File parent,String child):在指定的目录下创建文件。
创建File对象成功后可以使用以下常用方法: - public boolean exists():判断文件或目录是否存在
- public boolean isFile():判断是文件还是目录
- public boolean isDirectory():判断是文件还是目录
- public String getName():获取文件名或目录名
- public String getPath():获取文件路径或目录路径
- public String getParent():获取文件父路径
- public long length():获取文件的长度
- public String[] list():获取一个包含目录中所有文件名的字符串数组
- public boolean renameTo(File newFile):重命名文件
- public void delete():删除文件
- public boolean mkdir():创建目录,如果父目录不存在则异常
- public boolean mkdirs():创建目录,如果不存在父目录则一起创建
- public boolean createNewFile:创建文件
IO操作
什么是IO
什么是IO,即输入(Input)/输出(Output),输入就是程序读取外部数据(文件、网络、键盘)到程序(内存)中,输出就是将程序(内存)中的数据输出给外部(文件、网络、键盘)。
Java中将数据的输入输出抽象为流,像水一样有顺序、单向的、有起点和终点的数据集合。
流的分类
流的分类方式很多,根据流的最小数据单位可以将流分为字节流
,字符流
。
- 字节流:以8位(1byte,8bit)作为一个数据单位,数据流中最小数据单位为一个字节。(也就是C/C++里的二进制读写)
- 字符流:以16位(2byte,16bit)作为数据单位,数据流中最小数据单位为一个字符。Java中的字符是Unicode编码,所以一个字符占两个字节。
根据流的流向将流分为输入流
、输出流
。
-
输入流:InputStream,Reader,属于抽象类,是所有输入流的父类,定义了所有输入流都具有的共同特征。
-
输出流:OutputStream,Writer,属于抽象类,是所有输出流的父类,定义了所有输出流都具有的共同特征。
-
字节输入流InputStream的三个基本读方法
- abstract int read():读取一个字节的数据并返回读到的数据,当读到输入流的末尾时方法返回-1
- int read(byte[] b):将读取读取到byte数组中,同时返回实际读取的字节数,如果返回-1,表示读到了输入流的末尾
- int read(byte[] b,int off,int len):将数据读入到byte数组,同时返回实际读取的字节数,如果返回-1,表示读取到了末尾,off指定在数组中存放数据的起始偏移位置,len指定读取的最大字节数
-
字节输出流OutputStream中的三个基本的写方法
- abstract void write(int b):往输出流中写入一个字节
- void write(byte[] b):往输出流中写入数组b中的所有字节
- void write(byte[] b,int off,int len):往输出流中写入数组b中从偏移off开始的len个字节的数据
-
字符输入流Read基本的三个读方法:
- public int read() throws IOException:读取一个字符,返回值为读取的字符
- public int read(char cbuf[]) throws IOException:读取一系列字符到数组cbuf[]中,返回值为实际读取的字符数量。
- public abstract int read(char cbuf[],int off,int len) throws IOException:读取len个字符,从数组cbuf[]的下标off处开始存储,返回值为实际读取的字符数。
-
字符输出流Writer主要写方法:
- public void write(int c) throws IOException:写单个字符到输出流
- public void write(char cbuf[]) throws IOException:将字符数组cbuf[]写到输出流
- public abstract void write(char cbuf[],int off,int len) throws IOException:将字符数组cbuf[]中的从索引未off的位置处开始的len个字符写入输出流
- public void write(String str) throws IOException:将字符串str中的字符写入输出流
- public void write(String str,int off,int len) throws IOException:将字符串str中从索引off开始处的len个字符写入输出流
还能根据流是否直接处理数据将流分为节点流
、处理流
。节点流是直接处理数据的,处理流是装饰加工节点流的。
节点流:
- 文件流:FileInputStream,FileOutputStrean,FileReader,FileWriter,它们都会直接操作文件。因此他们被称为- -节点流 ,注意:使用这几个流对象之后,需要关闭流对象,因为java垃圾回收器不会主动回收。不过在Java7 之后,可以在try() 括号中打开流,最后程序会自动关闭流对象,不需要显示地close。
- 数组流:ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter,对数组进行处理的节点流。
- 字符串流:StringReader,StringWriter,其中StringReader能从String中读取数据并保存到char数组。
- 管道流:PipedInputStream,PipedOutputStream,PipedReader,PipedWrite,对管道进行处理的节点流。
处理流:
- 缓冲流 :BufferedInputStrean,BufferedOutputStream,BufferedReader ,BufferedWriter,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法,另外BufferedReader 提供一个readLine( )方法可以读取一行,而FileInputStream和FileReader只能读取一个字节或者一个字符,因此BufferedReader也被称为行读取器。
- 转换流:InputStreamReader,OutputStreamWriter,要InputStream或OutputStream作为参数,实现从字节流到字符流的转换,经常在读取键盘输入System.in或网络通信的时候,需要使用这两个类。
- 数据流:DataInputStream,DataOutputStream,提供将基础数据类型写入到文件中,或者读取出来。
常见IO操作
一、使用字符文件流读写文件
/**
* Java IO:使用文件流读写文件
* **/
public static void ReadFileAndWriteFile(){
// 建立一个输入流对象,将已存在的一个文件加载到输入流里面
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader(new File("src/com/company/read.txt"));
fw = new FileWriter(new File("src/com/company/write.txt"));
// 创建一个临时存放数据的数组
char[] buf = new char[1024];
int len;
// 调用输入流对象的读取方法将输入流的数据读取到数组中
while ((len = fr.read(buf)) != -1){
System.out.print(new String(buf,0,len)); //将读取到的byte型数组转为String并打印
fw.write(buf,0,len); // 将读取到的内容写入到文件
fw.write("写入文件完成");
fw.flush(); // 手动将缓冲区强制写入文件
}
} catch (IOException e) {
e.printStackTrace();