IO输入输出流

IO输入输出流

1.File类(文件的操作)

		/*
		 * 项目下的路径(默认路径):word.txt
		 * 包中的文件路径:src/包名/word.txt
		 * 		/和\\表示文件夹
		 * 绝对路径:C:\\text\\word.txt
		 * */
		File f1 = new File("F:\\word.txt");     //第一种构造方法
		File f2 = new File("F:\\","word.txt");  //第二种构造方法
		File dir = new File("F:\\");
		File f3 = new File(dir,"word.txt");     //第三种构造方法
		
		System.out.println(f1.getAbsolutePath());  //输出绝对路径
		System.out.println(f2.getAbsolutePath());
		System.out.println(f3.getAbsolutePath());

		System.out.println("文件是否存在:"+f1.exists());	//判断文件是否存在
		System.out.println("文件名:"+f1.getName());	//输出文件名
		System.out.println("文件的绝对路径:"+f1.getAbsolutePath());	//输出文件的绝对路径
		System.out.println("是否是隐藏文件:"+f1.isHidden());	//是否是隐藏文件
		System.out.println("文件的字节数:"+f1.length());		//输出文件大小(字节)

		Date date = new Date(f1.lastModified());	//通过毫秒值创建日期类
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
		System.out.println("文件最后的修改时间:"+sdf.format(date));	//文件最后的修改时间

		boolean del =  f1.delete();		//删除文件
		System.out.println("删除文件是否成功:"+del);

		try {
			boolean create =  f1.createNewFile();
			System.out.println("创建文件是否成功:"+create); 	//创建新空文件
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

2.File类(文件夹的操作)

		File dir = new File("dir");
		boolean flag =  dir.mkdir();	//创建文件夹
		System.out.println("创建文件是否成功:"+flag);

		File dir1 = new File("dir/dir1/dir2");
		boolean flag2 = dir1.mkdirs();	//创建文件夹及其父文件夹
		System.out.println("创建多层文件夹是否成功:"+flag2);

		boolean del =  dir1.delete();	//删除文件夹(删除文件路径最后一个文件夹)
		System.out.println("删除是否成功:"+del);

		/******/		

		File f = new File("F:\\File_Test");
		File[] files =  f.listFiles();	//返回文件夹下所有的直接子文件及其子文件夹
		for(File tmp : files){
			if(tmp.isFile()){	//判断是否为文件
				System.out.println("文件名:"+tmp.getName());
			}
			else if(tmp.isDirectory()){	//判断是否为文件夹
				System.out.println("文件夹名是:"+tmp.getName());
			}
		}

		/******/

		//遍历文件夹中所有的文件
	public static void getFile(String ss) {
		File f = new File(ss);		
		File[] files = f.listFiles();
		for(int i=0; i<files.length; i++) {
			if(files[i].isDirectory()) {
				ss = files[i].getPath();
				getFile(ss);	//递归调用此方法
			}else {
				System.out.println(files[i].getName());
			}			
		}

3.文件字节流

  • 输入流:输入到内存
  • 输出流:输出到外部设备(如硬盘)
    • 注意流的关闭(释放资源,先创建的后关闭)
		File f = new File("F:\\word.txt");
		
		//读写的是字节
		FileOutputStream fos = new FileOutputStream(f);	//输出流
		//FileOutputStream fos = new FileOutputStream(f,true); true:在文件末尾添加;false:替换文件内容.
		String str = "你见过洛杉矶凌晨四点的样子吗?";
		byte[] b = str.getBytes();
		fos.write(b);
		fos.close();

		/***/
		FileInputStream fis = new FileInputStream(f);	//输入流
		byte[] b = new byte[1024];
		int len=0;
		while((len=fis.read(b))>0){		//read方法读到的东西放到数组b里,如果len>0或者!=null,说明读到东西了
			System.out.println(new String(b,0,len));
		}

		/******/
		//读写的是字符(1个汉字等于2个字节,当读的字节多了会出现乱码)
		FileWriter fws = new FileWriter(f);		//文件字符输出流
		String str = "你见过洛杉矶凌晨四点的样子吗?";
		fws.write(str);	//写的是字符串
		fws.close();
		
		/***/
		FileReader fed = new FileReader(f);	//字符输入流
		char[] ch = new char[1024];
		int len=0;
		while((len=fed.read(ch))>0){
			System.out.println(new String(ch,0,len));
		}

把输入输出流写成方法:
1.此方法功能就是把本地的一个文件或者图片复制到本地所指定的位置

		public static void main(String[] args) throws IOException {
			copy_Location("D:\\xxx.jpg","F:\\xc.jpg");
		}


		public static void copy_Location(String src,String path) throws IOException{
			File s = new File(src);		//需要辅助的文件或图片的路径
			File op = new File(path);	//指定的路径
			FileInputStream fis = new FileInputStream(s);
			FileOutputStream fos = new FileOutputStream(op);	
			byte[] b = new byte[1024];
			int len = 0;
			while((len=fis.read(b))>0){
				fos.write(b,0,len);
			}
			fos.close();
			fis.close();
		}

2.此方法的功能是给你一个url连接来下载到本地(如一些小视频或者网上的图片)

		public static void main(String[] args) throws IOException {
		String src = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553702752392&di=4f529b67d7e6275cd066368c385b8122&imgtype=0&src=http%3A%2F%2Fs3.sinaimg.cn%2Fmw690%2F002yLiaTty6EbtikBma92%26690";
		copy_Url(src,"D:\\liuDeHua.jpg" );
	}

		public static void copy_Url(String src,String path) throws  IOException{
			URL url = new URL(src);	
			HttpURLConnection ucon =  (HttpURLConnection) url.openConnection();
			InputStream is =  ucon.getInputStream();
			File op = new File(path);
			FileOutputStream fos = new FileOutputStream(op);
			byte[] b = new byte[1024*6];
			int len = 0;
			while((len = is.read(b))>0){
				fos.write(b,0,len);
				System.out.println("len:"+len);
			}
			fos.close();
			is.close();
		}

4.缓冲字节流

		/*
		 * 1.缓冲字节流
		 * 	  BufferedInputStream 缓冲输入流
		 *    BufferedOnputStream 缓冲输出流
		 * */
		File f = new File("C:\\Users\\11515\\Desktop\\java\\API\\JDK_API_1_6_zh_CN.CHM");//这里以复制帮助文档的快慢来举例
		FileInputStream fis = new FileInputStream(f);
		BufferedInputStream bis = new BufferedInputStream(fis);	//将文件字节流包装成缓冲字节流(大大提高了运行效率)
		
		byte[] b = new byte[1024];	//缓冲区(这个缓冲区与Buffered不同)
		int len = 0;
		long start= System.currentTimeMillis();	//获取流开始时的毫秒值
		while((len=bis.read(b))>0){	//使用缓冲流读取数据
			
		}
		long end = System.currentTimeMillis();	//获取流结束时的毫秒值
		System.out.println("所耗时间时:"+(end - start));
		fis.close();
		/*
		 * 同样是读API,fis(字节输入流)用了100多毫秒,bis(缓冲输入流)用了20几毫秒
		 * */
		 
		/***/
		File f = new File("F:\\W.txt");
		FileOutputStream fos = new FileOutputStream(f);
		BufferedOutputStream bos = new BufferedOutputStream(fos);	//包装文件输出流
		String str= "理想今年你几岁?";
		byte[] b = str.getBytes();
		bos.write(b);
		//使用缓冲字节输出流时,要多进行刷新操作
		bos.flush();	//刷新,强制将缓冲区数据写入到文件中去,即使缓冲区没有写满(避免等待,有数据就写)
		fos.close();

5.缓冲字符流

		/*
		 * 2.缓冲字符流
		 * 	  BufferedReader 缓冲字符输入流
		 * 	  BufferedWrite  缓冲字符输出流
		 * 可以以行为单位进行输入和输出
		 * */
		 
		File f = new File("F:\\缓冲字符流.txt");
		FileWriter fw = new FileWriter(f);	//文件字符输出流
		BufferedWriter bw = new BufferedWriter(fw);
		
		String str1 = "世界这么大";
		String str2 = "我想去看看~";
		bw.write(str1);
		bw.newLine();	//创建一个新行
		bw.write(str2);
		
		bw.close();
		fw.close();

		/***/
		File f = new File("F:\\缓冲字符流.txt");
		FileReader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);	//将文件字符输入流包装成缓冲字符输入流
		String tmp = null;
		int i=1;
		while((tmp = br.readLine())!=null){	//读一行
			System.out.println("这是第"+i+"行:"+tmp);
			i++;
		}
		br.close();
		fr.close();

6.数据流

		/*
		 *1.数据流(可以从流中读取或写入Java基本数据类型)
		 *   DataInputStream 数据输入流
		 *   DataOuputStream 数据输出流(写的是字节码)
		 * 	 
		 * */
		 
		File f = new File("F:\\wo.txt");
		FileOutputStream fos = new FileOutputStream(f);
		DataOutputStream dos = new DataOutputStream(fos);	//将文件流包装成数据流
		
		dos.writeUTF("这是写入字符串数据");
		dos.writeInt(123456);
		dos.writeDouble(3.14);
		dos.writeBoolean(true);
		
		dos.close();
		fos.close();

		/***/

		FileInputStream fis = new FileInputStream(f);
		DataInputStream dis = new DataInputStream(fis);
		System.out.println(dis.readUTF());
		System.out.println(dis.readInt());
		System.out.println(dis.readDouble());
		System.out.println(dis.readBoolean());
		dis.close();
		fis.close();
		/*
		 * 2.字节流转为字符流
		 *   InputStreamReader
		 *   OutputStreamWriter
		 *   可以指定字符集
		 * */
		 
		File f = new File("F:\\wo.txt");
		FileOutputStream fos = new FileOutputStream(f); //文件字节流
		OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK"); //字节流转为字符流的桥梁.将数据按照GBK字符集写入(文本文档默认是GBK解码)
		BufferedWriter bw = new BufferedWriter(osw);	//缓冲字符流
		bw.write("你见过洛杉矶凌晨四点的样子吗?");
		
		bw.close();
		osw.close();
		fos.close();

		/***/
		FileInputStream fis = new FileInputStream(f);
		InputStreamReader isr = new InputStreamReader(fis,"GBK");	//utf-8与上面GBK不符
		BufferedReader br = new BufferedReader(isr);
		int i=1;
		String str=null;
		while((str = br.readLine())!=null){
			System.out.println("第"+i+"行:"+str);
			i++;
		}
		br.close();
		isr.close();
		fis.close();

如果有不恰当的地方欢迎指正,不是特别详细不懂的朋友可以百度一下

你可能感兴趣的:(Java)