第十五章:输入输出流I/O

15.1:输入/输出流

文件类:File

字节流:InputStream:入 OutputStream:出

字符流:Reader:入 Writer:出

15.1.1 输入流

InputStream类是字节输入流的抽象类,所有字节流的父类。该类中所有方法遇到错误会引发IOException异常。

该类中有一些方法

read()

read(byte[] b)

mark(int readlimit)

reset()

skip()

15.1.2 输出流

15.2 File类

操作:创建或者删除

状态:文件是否存在或者隐藏

创建文件对象

new File(String Pathnname)

File file = new File(“d:/1.txt”)

new File(String parent,String child)

new  File(File parent,String child) 
15.2.1:文件的创建与删除

package fifteenth;
 
import java.io.File;
 
public class FileTest {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("D:\\word.text");//创建文件对象
		if(file.exists()) {//exists:存在
			file.delete();//如果该文件存在
			System.out.println("文件已删除");//将该文件删除
			
		}else {//如果文件不存在
			try {
				file.createNewFile();//try语句捕捉可能出现的异常
				System.out.println("文件已创建");//创建该文件
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
 
}
//例题15.1

15.2.2:获取文件信息

 
  1.  
    package fifteenth;
     
    import java.io.File;
     
    public class FileTest {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		File file = new File("D:\\word.text");//创建文件对象,两个斜杠是转义字符
    		if(file.exists()) {//exists:存在
    			String name = file.getName();//获取文件名称
    			long length = file.length();//获取文件长度
    			boolean hidden = file.isHidden();//判断文件是否隐藏
    			file.delete();//如果该文件存在
    			System.out.println("文件已删除");//将该文件删除
    			System.out.println("文件名称:"+name);
    			System.out.println("文件长度是:"+length);
    			System.out.println("该文件是隐藏文件吗?"+hidden);
    			
    		}else {//如果文件不存在
    			try {
    				file.createNewFile();//try语句捕捉可能出现的异常:各种问题,处理或者抛出
    				System.out.println("文件已创建");//创建该文件
    				
    			}catch(Exception e){
    				e.printStackTrace();
    			}
    			System.out.println("该文件不存在");
    		}
    	}
     
    }
    //例题15.2

    递归算法

     
  2.  
    package fifteenth;
     
    import java.io.File;
     
    public class File1 {
    	public static void main(String[] args) {
    		
    		File file = new File("D:\\xinli");
    		printAllFiles(file);
    				
    	}
    //在方法里再次调用方法,递归算法
    	private static void printAllFiles(File file) {
    		// TODO Auto-generated method stub
    		File[] files = file.listFiles();
    		for( File f: files) {
    			if(f.isDirectory()){
    				printAllFiles(f);
    			}else {
    				System.out.println(f.getName());
    			}
    		}
    		
    	}
    }

    文件夹加持代码效果

  3. 15.3:文件输入/输出流

  4. 15.3.1:FileInputStream与FileOutputStream(字节流)

    package fifteenth;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
     
    public class FileSteamDemo { // 创建类
    	public static void main(String[] args) { // 主方法
    		File file = new File("D:\\word.txt"); // 创建文件对象
    		try { // 捕捉异常
    			FileOutputStream out = new FileOutputStream(file); // 创建FileOutputStream对象
    			byte buy[] = "我有一只小毛驴,我从来也不骑。".getBytes(); // 创建byte型数组
    			out.write(buy); // 将数组中的信息写入到文件中
    			out.close(); // 将流关闭
    		} catch (Exception e) { // catch语句处理异常信息
    			e.printStackTrace(); // 输出异常信息
    		}
    		try {
    			// 创建FileInputStream类对象
    			FileInputStream in = new FileInputStream(file);
    			byte byt[] = new byte[1024]; // 创建byte数组
    			int len = in.read(byt); // 从文件中读取信息
    			System.out.println("文件中的信息是:" + new String(byt, 0, len));// 将文件中的信息输出
    			in.close(); // 关闭流
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    //例题15.3
    package fifteenth;
     
     
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FileReaderDemo {
    	public static void main(String[] args) {
    		File file = new File("D:\\word.txt"); // 创建文件对象
    		try { 
    			FileWriter fw = new FileWriter(file); // 创建字符输出流
    			String word = "明月几时有,把酒问青天。"; // 写入的字符串
    			fw.write(word); // 将字符串写入到文件中
    			fw.close(); // 关闭流
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			FileReader fr = new FileReader(file);// 创建字符输入流
    			char ch[] = new char[1024]; // 缓存字符数组
    			int len = fr.read(ch); // 将文件中的字符读入到缓存数组中
    			System.out.println("文件中的信息是:" + new String(ch, 0, len));// 将字符转为字符串输出
    			fr.close(); // 关闭流
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }//例题15.4

  5. FileOutputStream

     

  6. 在文件内显示

    package fifteenth;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;//导入需要的类
     
    public class FileStreamDemo {
        //写入文件内容,读出来内容
    	public static void main(String[] args) throws IOException {
    		File file = new File("D:\\word.txt");//获取文件
    		//字节流输出,在文件内显示
    		FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出
    		byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符
    		out.write(by);//调用方法,输入
    		out.close();//关闭输出流,不然会一直占用空间
    		//字节流输入,在控制台显示
    		FileInputStream in = new FileInputStream(file);
    		byte[] by1 = new byte[1024];//1024字节太长,解决方法是指定长度读取并打印
    	    int len  =	in.read(by1);
    		System.out.print(new String(by1,0,len));//0和len指代从0号位置开始读取到len位置结束
    		in.close();//关闭
     
    	}
     
    }

  7. 15.3.2:FileReader和FileWriter

    package fifteenth;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FileReaderDemo {
     
    	public static void main(String[] args) throws Exception {
    		// FileWriter输出 和 输入
    		File file = new File("D:\\word.txt");//获取文件
    		//字符流输出,在文件内显示
    		FileWriter writer = new FileWriter(file);//对于程序来说是输出
    		char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符
    		writer.write(ch);//调用方法,输入
    		writer.close();//关闭输出流,不然会一直占用空间
    		//字符流输入,在控制台显示
    		FileReader reader = new FileReader(file);
    		char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印
    	    int len  =	reader.read(ch1);//读出
    		System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束
    		reader.close();//关闭
     
    	}
     
    }

  8. 15.4:带缓存的输入/输出流

    普通流转换为带缓存的流

    15.4.1 BufferedInputStream和BufferedOutStream

    15.4.2:BufferedWriter和BufferedReader

    package fifteenth;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class BufferedDemo {
    	public static void main(String args[]) {
    		String content[] = { "好久不见", "最近好吗", "常联系" };// 写入的内容
    		File file = new File("D:\\word.txt"); // 创建文件对象
    		try {
    			FileWriter fw = new FileWriter(file); // 文件字符输出流
    			BufferedWriter bw = new BufferedWriter(fw); // 换成输出流
    			for (int k = 0; k < content.length; k++) { // 遍历要输入的内容
    				bw.write(content[k]); // 写入字符串
    				bw.newLine(); // 写入一个换行符
    			}
    			bw.close(); // 关闭缓冲输出流
    			fw.close(); // 关闭文件字符输出流
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			FileReader fr = new FileReader(file); // 文件字符输入流
    			BufferedReader br = new BufferedReader(fr);// 缓冲输入流
    			String tmp = null; // 作为缓冲的临时字符串
    			int i = 1; // 行数
    			// 从文件中读出一行,如果读出的内容不为null,则进入循环
    			while ((tmp = br.readLine()) != null) {
    				System.out.println("第" + i + "行:" + tmp); // 输出读取的内容
    				i++; // 行数递增
    			}
    			br.close(); // 关闭缓冲输入流
    			fr.close(); // 关闭文件字符输入流
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }//例题15.5

  9. //普通流

    FileWriter writer = new FileWriter(file);

    writer.write("门前大桥下,游过一群鸭");//调用方法,输入

    writer.write("快来快来数一数,二四六七八");

    writer.write("咕嘎咕嘎,真呀真多呀");

    writer.write("数不清到底多少鸭");

    //带缓存的流

    BufferedWriter bw = new BufferedWriter(writer);

    bw.write("门前大桥下,游过一群鸭");//调用方法,输入

    bw.newLine();

    bw.write("快来快来数一数,二四六七八");

    bw.newLine();

    bw.write("咕嘎咕嘎,真呀真多呀");

    bw.newLine();

    bw.write("数不清到底多少鸭");

    bw.close();

    缓存代码输出
     

    package fifteenth;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class FileReaderDemo {
     
    	public static void main(String[] args) throws Exception {
    		// FileWriter输出 和 输入
    		File file = new File("D:\\word.txt");//获取文件
    		//缓存输出,在文件内显示
    		FileWriter writer = new FileWriter(file);//对于程序来说是输出
    		//缓存写入,将普通流转换为待缓存的流,进行换行操作
    		BufferedWriter bw = new BufferedWriter(writer);//传入普通流
    		//char[] ch = new char [] {'z','h'};创建char类型的字节类型数组,输入想要的文字或字符
    	//可以传入字符串
    		bw.write("门前大桥下,游过一群鸭");//调用方法,输入
    		bw.newLine();
    		bw.write("快来快来数一数,二四六七八");
    		bw.newLine();
    		bw.write("咕嘎咕嘎,真呀真多呀");
    		bw.newLine();
    		bw.write("数不清到底多少鸭");
    		bw.close();
    		writer.close();//关闭输出流,不然会一直占用空间
    		//缓存输入,在控制台显示
    	FileReader reader = new FileReader(file);
    	BufferedReader br = new BufferedReader(reader);
          String s1  =	br.readLine();
          System.out.println("第一行:"+s1);
          System.out.println("第二行:"+br.readLine());
          System.out.println("第三行:"+br.readLine());
          System.out.println("第四行:"+br.readLine());
    		reader.close();//关闭
     
    	}
     
    }

  10. 15.5:数据输入/输出流

    package fifteenth;
     
    	import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    	public class DataStreamDemo {
    		public static void main(String[] args) throws IOException {
    			//输入文件里面
    	File file = new File("D:\\word.txt");
    	FileOutputStream isr = new FileOutputStream("gbk"); 
    	DataOutputStream zhw = new DataOutputStream(isr);
    	FileOutputStream fos = new FileOutputStream(file);//先拿到普通字节流,传入参数告诉他往哪里输出
    	DataOutputStream dos = new DataOutputStream(fos);//转化数据流
    	dos.writeBoolean(false);
    	dos.writeUTF("你好世界");//好处是规定类型,text编码集相同就可以显示
    	dos.writeDouble(88.88);//坏处无法看懂,存入是可以的
    	dos.close();
    	fos.close();//乱码
    	isr.close();
    	zhw.close();
    	//输出控制台里面
    	FileInputStream fis = new FileInputStream(file);
    	DataInputStream dis = new DataInputStream(fis);
    	System.out.println(dis.readBoolean());
    	System.out.println(dis.readUTF());//utf可以读出
    	System.out.println(dis.readDouble());//read方法无法读出chars
    	dis.close();
    	fis.close();
    	}
     
    }

  11. 在此次代码内,代码具有两面性,如果txt文本的编码集和utf编码集适配,就会被写入文件

     
  12.  
    package fifteenth;
     
    import java.io.*;
     
    public class DateSteamDemo {
    	public static void main(String[] args) {
    		File file = new File("D:\\word.txt");
    		try {
    			// 创建FileOutputStream对象,指定要向其中写入数据的文件
    			FileOutputStream fos = new FileOutputStream(file);
    			// 创建DataOutputStream对象,用来向文件中写入数据
    			DataOutputStream dos = new DataOutputStream(fos);
    			dos.writeUTF("使用writeUTF()方法写入数据"); // 将字符串写入文件
    			dos.writeDouble(19.8); // 将double数据写入文件
    			dos.writeInt(298); // 将int数据写入文件
    			dos.writeBoolean(true); // 将boolean数据写入文件
    			dos.close();
    			fos.close();
     
    			// 创建FileInputStream对象,指定要从中读取数据的文件
    			FileInputStream fis = new FileInputStream(file);
    			// 创建DataInputStream对象,用来从文件中读取文件
    			DataInputStream dis = new DataInputStream(fis);
    			// 读取字符串
    			System.out.println("readUTF方法读取数据:" + dis.readUTF());
    			// 读取double数据
    			System.out.println("readDouble方法读取数据:" + dis.readDouble());
    			// 读取int数据
    			System.out.println("readInt方法读取数据:" + dis.readInt());
    			// 读取boolean数据
    			System.out.println("readBoolean方法读取数据:" + dis.readBoolean());
    			dis.close();
    			fis.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    //例题15.6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值