黑马程序员---IO流(二)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、字节流

1,字节流的基本对象:InputStream,OutputStream。

BufferedInputStream,BufferedOutputStream。

package 博客9_IO流二;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class 字节流读写Demo 
{
	public static void main(String[] args) throws IOException
	{
		//WriteFile();
		//ReadFile_1();
		//ReadFile_2();
		ReadFile_3();
		
	}
	public static void ReadFile_3() throws IOException
	{
		FileInputStream fis = new FileInputStream("Write.txt");
		byte [] by = new byte[fis.available()];//定义一个大小刚好的缓冲区,但是这样做容易内存溢出,需要小心
		fis.read(by);
		System.out.println(new String(by));
		fis.close();
	}
	public static void ReadFile_2() throws IOException
	{
		FileInputStream fis = new FileInputStream("Write.txt");
		byte [] by = new byte[1024];
		int len = 0;
		while((len=fis.read(by))!=-1)
		{
			System.out.println(new String(by,0,len));
		}
		fis.close();
	}
	public static void ReadFile_1()throws IOException
	{
		FileInputStream fis = new FileInputStream("Write.txt");
		int ch = 0;
		while((ch=fis.read())!=-1)
		{
			System.out.println((char)ch);
		}
		fis.close();
	}
	public static void WriteFile()throws IOException
	{
		FileOutputStream fops = new FileOutputStream("Write.txt");
		fops.write("abcdefg".getBytes());
		//注意:字节流在写入的时候和字符流不同,即便是不刷新,写入文档里也会有内容。
		fops.close();
	}
}
2,自定义字节流缓冲区。
<pre name="code" class="java" style="font-size: 14px;">package 博客9_IO流二;
import java.io.*;
class MyBufferedInputStream
{
	private InputStream in;
	private int count=0,pos=0;
	private byte[] buf = new byte[1024];
	MyBufferedInputStream(InputStream in)
	{
		this.in = in;
	}
	public int myRead() throws IOException
	{
		//通过in对象读取数据,并存储到硬盘中
		if(count == 0)
		{
			count = in.read(buf);
			if(count<0)
				return -1;
			pos=0;
			byte b = buf[pos];
			count--;
			pos++;
			return b&255;//在返回值的前面补0,否则会复制失败
		}
		else if(count>0)
		{
			byte b = buf[pos];
			count--;
			pos++;
			return b&255;
		}
		return -1;
	}
	public void Myclose() throws IOException {
		// TODO Auto-generated method stub
		in.close();
	}
}
class MyBufferedInputStreamText
{
	public static void main(String[] args)throws IOException
	{
		copy();
	}
	public static void copy() throws IOException
	{
		MyBufferedInputStream mbr = new MyBufferedInputStream(new FileInputStream("HashSetDemo.java"));
		BufferedOutputStream bufs = new BufferedOutputStream(new FileOutputStream("Writer_2.java"));
		int b = 0;
		while((b=mbr.myRead())!=-1)
		{
			bufs.write(b);
		}
		mbr.Myclose();
		bufs.close();
	}	
}
 

<strong><span style="font-size:18px;">二、读取键盘录入</span></strong>
1,读取键盘录入:

System.out:对应的是标准的输出设备,控制台。

System.in:对应的是标准输入设备,键盘。

package 博客9_IO流二;

import java.io.IOException;
import java.io.InputStream;
/*
 * 需求:当录入一行数据后,就将该数据打印,如果录入的是“over”的话,则程序停止
 * */
public class 键盘录入
{
	public static void main(String[] args)throws IOException
	{
		InputStream in = System.in;
		StringBuilder sb = new StringBuilder();
		while(true)
		{
			int ch = in.read();
			if(ch=='\r')
			{
				continue;
			}
			if(ch=='\n')
			{
				String s = sb.toString();
				if("over".equals(s))
					break;
				System.out.println(s.toUpperCase());
				sb.delete(0,sb.length());
			}
			else
				sb.append((char)ch);
		}
	}
}
2,读取转换流:用转换流的方式简化上述代码。
package 博客9_IO流二;

import java.io.*;

public class 转换流 {

	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
		//获取键盘录入对象,使用转换流,并将字符串存入缓冲区
		BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			System.out.println(line.toUpperCase());
		}
		bufr.close();
	}
}
3,流操作的基本规律:通过两个明确来完成。

a,明确源和目的。

源:输入流。InputStream Reader。

目的:输出流。OutputStream Writer。

b,操作的数据是否是纯文本。

是:字符流

不是:字节流

c:当体系明确后,再明确要使用哪个具体的对象,并通过设备来区分。

源设备:内存,硬盘,键盘。

目的设备:内存,硬盘,控制台。
三、File类简述

File类:用来将文件或者文件夹封装成对象的类,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。

File类的特点:可以将已有的或者还没有的文件或者文件夹封装成对象。

创建File类对象:File f = new File("文件名“)或者File f = new File(”目录“,”文件名“)

目录分隔符:File.separator。

File类的常见方法:

1,创建:File.createNewFile();在指定位置创建文件,如果该文件已经存在,则创建失败,返回false。

mkdir();创建单级目录的文件夹。

mkdirs();创建多级目录的文件夹。

2,删除:Boolean delete();deleteOnExit();程序结束时删掉。

3,判断:canExecute();判断文件是否能执行。

boolean exists();判断文件是否存在。

isDirectory();判断是不是目录。

isFile();判断是不是文件。

注意:在判断文件对象是否是文件或者目录时,必须要 先判断该文件对象封装的内容是否存在。

4,获取信息:getName();getPath();lastModified();--->最后一次修改的时间。length();

getParent();该方法返回的是绝对路径中的父目录,如果获取的是相对路径,则返回为空。

四、递归

需求:列出指定目录下文件或者文件夹,要求包含子目录中的内容。

因为目录中还有目录,所以只要使用同一个列出目录功能的函数完成即可。在列出过程种出现的还是目录的话,可以再次调用本功能,也就是函数自身调用自身,这种编程手法,即成为递归

使用递归时应注意:

1,限定递归条件。

2,要注意递归的次数,避免内存溢出。

package 博客9_IO流二;
import java.io.*;
public class 递归 
{
	public static void main(String[] args)throws IOException
	{
		File dir = new File("f:\\java学习");
		showDir(dir);
	}
	public static void showDir(File dir)
	{
		System.out.println(dir);
		File [] files = dir.listFiles();
		for(int x = 0 ; x < files.length;x++)
		{
			if(files[x].isDirectory())
				showDir(files[x]);//递归,再次调用showDir函数来获取子目录
			else
				System.out.println(files[x]);
		}
	}
}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧通管理系统和溯源管理系统提高通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值