java中IO基本知识点

java IO技术

核心类(5个)和接口(3个)

  1. file:文件类
  2. InputStream:字节输入流
  3. OutputStream:字节输出流
  4. Reader:字符输入流
  5. Writer:字符输出流
  6. Closeable:关闭流接口
  7. Flushable:刷新流接口
  8. Serializable:序列化接口

java中的输入输出,说的是以java的程序为中心的。

输入流:数据源到程序,(InputStream,Reader)
输出流:程序到目的地,(OutputStream,Writer)
节点流:可以直接从数据源或者目的地读写数据。
处理流(包装流):不直接连接到数据源或者目的地,是其他流进行封装,目的是简化操作和提高性能。

节点流和处理流的关系:
1.节点流处于io操作的第一线,所有的操作必须通过他们进行,
2.处理流可以对其他的流进行处理(提高效率或者操作的灵活性)

但是在不同的系统中文件的分隔符是不同的,在File类中提供了统一的分隔符,通过File.separator获得
在java中一般建议使用“/"来分隔

File类常见的一些方法

public class IoStream {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String path="D:\\Java\\myball\\src\\images\\ground.jpg";//java 中会自动加上转义字符
		//但是在不同的系统中文件的分隔符是不同的,在File类中提供了统一的分隔符
		//通过File.separator
		
		//1.在java中一般建议使用“/"来分隔
		String path1="D:/Java/myball/src/images/ground.jpg";
		
		//2.或者是使用File.separator来拼接。
		String path2="D:"+File.separator+"Java"+File.separator+"myball"+File.separator+"src"+File.separator+"images"+File.separator+"ground.jpg";
		System.out.println(path);
		System.out.println(path1);
		System.out.println(path2);
		//1.构建File对象
		File src=new File(path1);
		System.out.println("长度:"+src.length());//图的大小
		//2.
		File src1=new File("D:/Java/myball/src/images","ground.jpg");
		//3.
		File src2=new File(new File("D:/Java/myball/src/images"),"ground.jpg");
		
		System.out.println(src1.getAbsolutePath());
		System.out.println(System.getProperty("user.dir"));
		
		
		System.out.println("名称:"+src1.getName());
		System.out.println("路径名:"+src1.getPath());//获得创建是的路径名
		//如果创建时的是绝对路径,则返回路径,如果是相对路径,则返回相对路径
		System.out.println("绝对路径:"+src1.getAbsolutePath());
		System.out.println("父名称:"+src1.getParent());//返回该文件的前面的所有文件名
		System.out.println("是否存在"+src1.exists());
		System.out.println("是否是文件夹"+src1.isDirectory());
		System.out.println("是否是文件"+src1.isFile());
		src=new File("xxx");
		if(!src.exists()) {
			System.out.println("文件不存在");
		}else {
			System.out.println("文件操作");
		}
		
		File src3=new File("D:/Java/myball/src/images");//文件夹
		System.out.println("文件夹的长度:"+src3.length());//0
		
		//文件夹的长度需要递归计算子孙文件
		
		//createNewFile()表示的是当文件不存在的时候才创建。如果文件创建失败的话,就创建失败。
		File src4=new File("D:/Java/myball/src/images/java.txt");
		System.out.println(src4.createNewFile());//createNewFile()不存在才创建
		//createNewFile()只能创建文件,不创建文件夹。
		System.out.println(src4.delete());//删除已经存在的文件。
		
		
		
		
		
	}

}

java中的目录

创建目录对象:
mkdir:确保上一级目录存在
mkdirs:可以创建父级目录

列出下一级
1.list():列出下一级目录的名称

2.listFile():列出下一级file对象

3.listRoots():列出所有的盘符;

遍历文件测试代码

public class TestDrectory {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File dir=new File("D:/Java/myball/src");
		String[] fileNames=dir.list();
		for(String s:fileNames) {
			System.out.println(s);
		}
		
		
		
		File[] files=dir.listFiles();
		for(File s:files) {
			System.out.println(s);
		}
		
		
		File[] roots=dir.listRoots();
		for(File s:roots) {
			System.out.println(s);
		}
	}

}

利用递归遍历文件夹,

public class TestDrectory {
	//利用递归遍历文件夹,
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File src=new File("D:/Java/myball/src");
		printName(src,0);
		
	}
	public static void printName(File src,int level) {
		
		for(int i=0;i<level;i++) {
			System.out.print("  ");
		}
		System.out.println(src.getName());
		
		if(src==null||!src.exists()) {//递归头
			return;
		}else if(src.isDirectory()) {//如果是目录
			for(File s:src.listFiles()) {
				printName(s,level+1);//递归体。
			}
			
		}
	}

}

//获取文件夹的大小。

public class TestDrectory {
	//获取文件夹的大小。
	
	private static long len=0;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		File src=new File("D:/Java/myball/src");
		count(src);
		System.out.println(len);
		
	}
public static void count(File src) {
		if(src!=null||src.exists()) {//如果存在
			if(src.isFile()) {//计算大小,递归头。
				len+=src.length();
			}else {//子孙及
				for(File s:src.listFiles()) {
					count(s);//递归体
				}
			}
		}
	}

}

利用面向对象的方法实现文件的大小计算,计算文件夹的个数,文件的个数

public class TestDrectory {
	//获取文件夹的大小。
	
	private  long len=0;
	private int dirCount;
	private int fileCount;
	private String path;
	private File src;
	public TestDrectory(String path) {
		super();
		this.path = path;
		this.src =new File(path);
		count(src);
	}
	
	public void count(File src) {
		if(src!=null||src.exists()) {//如果存在
			if(src.isFile()) {//计算大小,递归头。
				this.fileCount++;
				len+=src.length();
			}else {//子孙及
				this.dirCount++;
				for(File s:src.listFiles()) {
					count(s);//递归体
				}
			}
		}
	}

	public long getLen() {
		return len;
	}
	public int getDirCount() {
		return dirCount;
	}
	public int getFileCount() {
		return fileCount;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		String path="D:/Java/myball/src";
		TestDrectory td=new TestDrectory(path);
		System.out.println(td.len);
		System.out.println(td.dirCount);
		System.out.println(td.fileCount);
		
		
	}

}

java的字符编码

不同的字符集,在处理时会根据不同的规则,在进行编码和解码时,根据不同的规则进行。

如果在进行解码时,对字符长度的设定不匹配时,或者编码的字符集不匹配时,会出现乱码的现象

public class TestDrectory {
	
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		// TODO Auto-generated method stub
		
		//编码,
		String path="姓名";//GBK编码方式,是固定每个字符两个字节
		byte[] datas=path.getBytes();
		System.out.println(datas.length);
		//解码
		String path1=new String(datas);
		System.out.println(path1);
		//会出现乱码。当datas的长度不匹配或者是编码的字符集不匹配时,会出现乱码现象
		String path2=new String(datas,1,datas.length-1,"utf8");
		System.out.println(path2);
		
		
	}

}

发布了43 篇原创文章 · 获赞 11 · 访问量 2582

猜你喜欢

转载自blog.csdn.net/weixin_43328816/article/details/104316635