文章目录
输入输出流
-
外部系统的输入输出操作
-
字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,如FileInputStream、FileOutputStream。
-
字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,如FileReader、FileWriter。
序号 | 类 | 分类 | 功能 |
---|---|---|---|
1. | InputStream/OutputStream | 字节流 | 抽象类。 |
2. | Reader/Writer | 字符流 | 抽象类 |
3. | FileInputStream/FileOutputStream | 节点流 | 以字节为单位直接操作“文件”。 |
4. | ByteArrayInputStream/ByteArrayOutputStream | 节点流 | 以字节为单位直接操作“字节数组对象”。 |
5. | ObjectInputStream/ObjectOutputStream | 处理流 | 以字节为单位直接操作“对象”。 |
6. | DataInputStream/DataOutputStream | 处理流 | 以字节为单位直接操作“基本数据类型与字符串类型”。 |
7. | FileReader/FileWriter | 节点流 | 以字符为单位直接操作“文本文件”(注意:只能读写文本文件)。 |
8. | BufferedReader/BufferedWriter | 处理流 | 将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。 |
9. | BufferedInputStream/BufferedOutputStream | 处理流 | 将InputStream/OutputStream对象进行包装,增加缓存功能,提高 读写效率。 |
10. | InputStreamReader/OutputStreamWriter | 处理流 | 将字节流对象转化成字符流对象。 |
11. | PrintStream | 处理流 | 将OutputStream进行包装,可以方便地输出字符,更加灵活v |
File的关于文件的操作
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
//分隔符
System.out.println(File.separator); // 文件夹的分隔符字符串的\
System.out.println(File.separatorChar); // char的\
System.out.println(File.pathSeparator); //;
String userDir = System.getProperty("user.dir"); //相对路径的路径
System.out.println(userDir);
File f = new java.io.File("src/images/ball.png");
//基本信息
System.out.println(f.exists());
System.out.println(f.getName()); // ball.png
System.out.println(f.getPath()); // src\images\ball.png
System.out.println(f.getAbsolutePath());// D:\data\idea\testjava\src\images\ball.png
System.out.println(f.getParent()); //父路径 src\images,如果没有则为null
System.out.println(f.getParentFile());//父路径的File对象
//状态
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.isAbsolute());
System.out.println(f.isHidden());
//信息
if(f.isFile()){
//目录的length是0,没有存在的文件长度也是0
System.out.println("文件长度:"+f.length()+" B");
}
//创建文件,路径默认是项目下的路径
File nf = new File("aa.txt");
boolean isCreateSuccess = nf.createNewFile();
System.out.println(isCreateSuccess);
//删除文件
boolean isDeleteSuccess = nf.delete();
System.out.println(isDeleteSuccess);
}
}
File关于文件夹的操作
import java.io.File;
/**
* File目录的相关操作,
* 遍历打印文件
*/
public class TestFileFolder {
public static void main(String[] args) {
File[] roots = File.listRoots(); //盘符的File对象数组
for(File f:roots) {
System.out.println(f);
}
//创建目录,需要前一层目录存在
File file = new File("abc");
file.mkdir();
//多层创建,可以创建多层目录
new File("ddd/eee/fff").mkdirs();
new File("abc").deleteOnExit();
//列出下一级
File f1 = new File(".");
String[] fsting = f1.list(); //只列出名称
System.out.println(fsting);
File[] fs = f1.listFiles();//列出File对象
for(File f:fs){
System.out.println(f+":"+f.isDirectory());
//System.out.println(f.getAbsolutePath());
}
System.out.println("--------------");
leng = 0;
getFiles(new File("D:\\fvc"),0);
System.out.println(leng);
}
static long leng = 0;
//递归打印所有文件,顺便获取文件夹所有文件的大小
public static void getFiles(File file,int deep){
for(int i = 0;i<deep;i++){
System.out.print("-");
}
if(file.isDirectory()){
File[] fs = file.listFiles();
for(File f:fs){
getFiles(f,deep+1);
}
}else {
System.out.println(file.getAbsolutePath());
leng+=file.length();
}
}
}
字符集,字符串与字节数组的转换
import java.io.UnsupportedEncodingException;
public class TestEncode {
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "编程java";
//转换为字节数组
byte[] bytes = msg.getBytes();
System.out.println(bytes);
printByte(bytes);
byte[] bytesgbk = msg.getBytes("GBK");
printByte(bytesgbk);
byte[] bytesutf16 = msg.getBytes("UTF-16LE");
printByte(bytesutf16);
//字节数组转换为字符串
msg = new String(bytes,0,bytes.length,"utf8");
System.out.println(msg);
msg = new String(bytesgbk,0,bytesgbk.length,"GBK");
System.out.println(msg);
msg = new String(bytesutf16,0,bytesutf16.length,"UTF-16LE");
System.out.println(msg);
}
static void printByte(byte[] bytes){
/**
* 将字节数组打印成一行
*/
StringBuilder sb = new StringBuilder("[");
for(byte b:bytes){
sb.append(b+",");
}
sb.setCharAt(sb.length()-1,']');
System.out.println(sb);
}
}
四大抽象类
- InputStream/OutputStream和Reader/writer类是所有IO流类的抽象父类,前两个是字节的输入输出流,后面两个是字符的输入输出流。读和输入常用read和close方法,写和输出常用write,flush,close方法。
文件字节流
FileInputStream
- 按字节读取文件
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestIO {
public static void main(String[] args) throws IOException {
//FileInpuStream可以传入File或字符串路径,word里存abc三个字母
InputStream fis = new FileInputStream("testdata/word.txt");
System.out.println((char)fis.read()); //第一个字母a
System.out.println((char)fis.read()); //第二个字母b
System.out.println((char)fis.read()); //第三个字母c
System.out.println(fis.read()); //第4个返回-1,不是数据了
//关闭
fis.close();
//使用while来读,一直到最后,一次读取一个字符
InputStream fis1 = new FileInputStream("testdata/word.txt");
int temp;