Java 第四周笔记(IO)

IO

in 和 out

File

文件和目录路径名的抽象表示。描述的就是某个文件。

delete() 删除此抽象路径名表示的文件或目录。

createNewFile() 当且仅当具有此名称的文件尚不存在时,以原子方式创建由此抽象路径名命名的新空文件。true如果指定的文件不存在且已成功创建; false如果指定的文件已存在

getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。

exists() 测试此抽象路径名表示的文件或目录是否存在。

isFile() 测试此抽象路径名表示的文件是否为普通文件。

isDirectory() 测试此抽象路径名表示的文件是否为目录。

listFiles() 返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。

list() 返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。

mkdir() 创建此抽象路径名指定的目录。

mkdirs() 创建此抽象路径名指定的目录,包括任何必需但不存在的父目录。

renameTo(File dest) 重命名此抽象路径名表示的文件。

文件搜索代码的实现:

public static void main(String[] args) {
	File e = new File(pathname:"e:\\");
	File[] files = e.listFiles();
	listFiles(files);
}
public static void listFiles(File[] files) {
	if (files != null && files.Length > 0) {
		for (File file : files) {
			if (file.isFile()) {
				//文件
				if (file.getName().endsWith(" . avi")) {
					//找到了一个avi文件
					if (file.Length() > 200 * 1024 * 1024) {
						file.deLete();
						System.out.printLn(file.getAbsoLutePath() + "已删除");
					}
				}
		//System.out.printLn("找到了一个avi文件:" + file.getAbsoLutePath());
			}
		}
		eLse {
			//文件夹
			File[] files2 = file.listFiles();
			listFiles(files2);
		}
	}
}
public static void main(String[] args) {
	File e = new File("e:\\");
	listFiles(e);
}

public static void listFiles(File file) {
//1.创建一个过滤器并描述规则
	FileFilter filter = new AVIFileFilter();
//2.通过文件获取子文件夹
	File[] files = file.listFiles(filter);
	if (files != null && files.length > 0)
		for (File f : files) {
			if (f.isDirectory()) {
				listFiles(f);
			} else {
				System.out.println("发现一个avi:" + f.getAbsolutePath());
			}
		}
}

static class AVIFileFilter implements FileFilter {
	@Override
	public boolean accept(File pathname) {
		if (pathname.getName().endsWith(" .avi") || pathname.isDirectory())
			return true;
		return false;
	}
}

相对路径和绝对路径

绝对路劲:从盘符开始,是一个完整的路径例如:c://a.txt

相对路径:在Java代码中是相对于项目路径,这是一个不完整的便捷路径。在Java开发中很常用。例如:a.txt

IO流

可以将这种数据传输操作,看作一种数据的流动,按照流动的方向分为输入Input和Output

Java中的IO操作主要指的是java.io包下的一些常用类的使用,通过这些常用类对数据进行读取(输入Input)和写出(输出Output)

分类

按照流的方向来分,可以分为:输入流和输出流。

按照流的数据类型来分,可以分为字节流和字符流

字节流:

输入流:InputStream

输出流:OutputStream

字符流:

输入流:Reader

输出流:Writer

字节流

一切皆字节:

计算机中的任何数据(文本、图片、视频、音乐等)都是以二进制的形式储存的。在数据传输时也都是以二进制的形式储存的。后续学习的任何流,在传输时都是二进制。

OutputStream

此抽象类是表示输出字节流的所有类的超类。

方法:

close():关闭此输出流并释放与此流关联的所有系统资源。

flush():刷新此输出流并强制写出任何缓冲的输出字节。

write(int b) 将指定的字节写入此输出流。

write(byte[] b) 将 b.length字节从指定的字节数组写入此输出流。

write(byte[] b, int off, int len) 将从偏移量 off开始的指定字节数组中的 len字节写入此输出流。

InputStream

read() 从输入流中读取下一个数据字节。从输入流中读取下一个数据字节。 值字节返回int ,范围为0至255 。如果由于到达流末尾而没有可用字节,则返回值-1 。

read(byte[] b) 从输入流中读取一些字节数并将它们存储到缓冲区数组 b 。 如果b的长度为零,则不读取任何字节,并返回0 ; 否则,尝试读取至少一个字节。 如果由于流位于文件末尾而没有可用字节,则返回值-1 ; 否则,至少读取一个字节并存储到b 。

任何数据 ^相同的数据两次结果就是其本身

字符流

Writer

append(char c) 将指定的字符追加到此writer。

write(char[] cbuf) 写一个字符数组。

write(char[] cbuf, int off, int len) 写一个字符数组的一部分。

write(int c) 写一个字符。

write(String str) 写一个字符串。

write(String str, int off, int len) 写一个字符串的一部分。

flush

刷新缓存空间,强制将缓存区域文字输入。

Reader

read() 读一个字符。

字符读取,为0到65535( 0x00-0xffff )范围内的整数,如果已到达流末尾,  0x00-0xffff -1 

read(char[] cbuf) 将字符读入数组。

读取的字符数,如果已到达流的末尾,则返回-1

read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

read(CharBuffer target) 尝试将字符读入指定的字符缓冲区。

转换流

将字节流 装饰(转换)为字符流:使用了装饰者设计模式。

    FileInputstream fis = new FileInputStream(name: "c://a.txt");
    //将字节输入流,转换为字符输入流
    //参数1.要转换的字节流
    //参数2.指定编码名称
```java
InputstreamReader isr = new InputStreamReader(fis, charsetName: "gbk");
while(true){
    int c = isr.read();
    if(c == -1){
        break;
    }
    System.out.println((char)c);
}
FileOutputStream fos = new FileOutputStream(name: "c://a.txt");
outputstreamWriter osw = new OutputStreamWriter(fos);
osw.write(str:"床前明月光");
osw.flush();
osw.close();

字符输出(打印流)

PrintStream ps = new PrintStream(fileName:"c://c.txt" );
ps.println("1");
ps.println("2");
ps.println("3");
PrintWriter ps = new PrintWriter(fileName: "c://c.txt");
pw.println("1");
ps.println("2");
ps.println("3");
pw.flush();
//也可用于转换

缓存读取流

将字符输入流 转换为带有缓存可以一次读取一行的缓存字符读取流。

FileReader fw = new FileReader( fileName: "c://c.txt");
BufferedReader br = new BufferedReader(fw);
String text = br.readLine();
System.out.println(text);

收集异常日志

try{
    string s = null;
    s.toString();
}catch(Exception e){
    PrintWriter pw = new PrintWriter( fileName: "c://bug.txt");
    e.printStackTrace(pw);
    pw.close();
}

Properties

store();将此 Properties表中的此属性列表(键和元素对)以适合使用 load()方法加载到 Properties表的格式写入输出流。

list(PrintStream out);list(PrintWriter out)将此属性列表打印到指定的输出流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值