编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

阿里P7大神,Java学习之路-IO流与XML,超赞分享

gowuye 2024-04-04 11:55 2 浏览 0 评论

其实在笔者学习数据库之前,数据的可视化,曾经用的是io+正则表达式+字符串处理等等类似的操作,敢信?io操作很重要的!!!

1、IO概述

IO:Input(输入:将磁盘中的文件读到内存中) | Output(将内存中的数据写入磁盘);

文件:磁盘中数据的组织单位(一堆字节数据)

流(Stream):将磁盘中的静态字节数据变成流动中的字节数据;(字节的序列形成流)

文件进行读写的操作的所有接口与类放在:java.io包中;

2、File类

探测文件|文件夹的信息,再进一步对文件|文件夹进行操作;

File :获取文件的信息 | 创建|删除|重命名|移动 ,等操作

对目录: 提供删除|创建目录以及获取目录下所有文件和文件夹等

获取指定目录下所有的资源(文件或者文件夹 -- 递归获取)

public static void getFileAndDirectory(File path) {
    try{
		File[] files = path.listFiles();
		for(File f :files) {
			if(f.isDirectory()) {
				//打印目录 信息;
				System.out.println(f.getPath());
				//再递归调用;
				getFileAndDirectory(f);
			}else {
				System.out.println(f.getPath());
			}
		 }
		}catch(Exception e){}
	}

3、IO流

A、字节流【重要】

对文件进行读写操作最底层的,字节流可以对任意格式 的文件进行操作;

public abstract class InputStream :读操作的字节流父类(抽象类)
public class FileInputStream extends InputStream ; 

InputStream
   -- FileInputStream
一次可以从流中读一个字节(read方法),如果返回-1,表示已到流的末尾(读完)
批量读取字节流数据:read(byte[] data) | read(byte[] data,int startindex,int len)

字节写入流

public abstract class OutputStream
public class FileOutputStream extends OutputStream
write(byte[] datas)
write(int data)
write(byte[] datas,int startindex,int len)

如何复制一个文件

//复制文件;
	public static void copy(String src,String dest) {
		InputStream in = null;
		OutputStream out = null;
		try {
			//1.创建一个读|写的流对象
			in = new FileInputStream(src);
			out = new FileOutputStream(dest);
			//一次读多少 ? -- 4k |8k;
			byte[] buffer =new byte[1024*4];
			int len = -1;
			while((len=in.read(buffer))!=-1) { //read方法的返回值是实际读的流长度 ;
				//将buffer中的数据写入到输出流中;
				out.write(buffer,0,len);
			}
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			//一定要先关输出流,再关输入流;
			if(out!=null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(in!=null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
		}
	}

B、字符流[重要]

对磁盘文本文件的读写,用字节流可以实现,但不太方便;SUN设计专业的一组流(字符流),对文本格式的文件进行读写操作,相对字节流,要方便一些;为了提供效率,再用上SUN设计的缓冲流

通过字符流读 文本格式文件 (不能通过字符流来读图片文件,声音文件,视频文件等)

public abstract class Reader
public class FileReader extends InputStreamReader extends Reader


read()
read(char[] data) | read(char[] data,int index,int len)
public abstract class Writer
public class FileWriter extends OutputStreamWriter extends Writer

write(int c) | writer(String str)
writer(char[] chars) | writer(char[] chars,int index,int len)

C、字符缓冲流[重要]

字符缓冲流只能对字符流进行缓冲 ,字符缓冲流有2个:BufferedReader , BufferedWriter

public class BufferedReader extends Reader

public class BufferedWriter extends Writer

D、标准输入流与标准备输出流[了解]

System.in : 获取键盘的数据;
System.out:输出 --- 显示器|控制台
public final class System {
	 public final static InputStream in = null; 键盘数据
	 public final static PrintStream out = null;
}

E、转换流

将字节流 变成 字符流 (单向)

public class InputStreamReader extends Reader
public class OutputStreamWriter extends Writer

F、对象流

对象流:如何将一个对象持久化(对象流的作用)

序列化:将对象转为流,用来存贮或者网络传输;

反序列化:将流中的数据转为对象

**注:**一个类创建的对象要能够被序列化,此类必须实现Serializable接口(是一个标识,没有任何设计)

public class ObjectOutputStream extends OutputStream
public class ObjectInputStream extends InputStream
transient :如果某一属性不需要被持化,添加此标识即可
private transient String nick;

G、数据流

数据流:将基本数据类型的数据及字符串持久化;

public class DataInputStream extends FilterInputStream extends InputStream
public class DataOutputStream extends FilterOutoputStream extends OutputStream

4、XML[重要]

XML:Extensible Markup Language (可扩展的标签语言),xml是一个纯文本格式的文件,相对文本文件,文档的内容一般用标签包裹(解析方便); XML在项目主要用来存放配制信息(每一个项目都有配制文件(xml文件))

XML文档作用 :存贮数据 (项目配制信息)

XML文档编写规范:

  • 第1行为文档声明(写法固定,一般不需手写,开发工具自动生成)
  • xml有且只一个根元素(节点)
  • 标签(元素)需要用一对尖括号包裹起来; 标签一般是成对出现的,起始标签与结束标签只差“/"
  • xml区分大小写的(一般用小写)
  • 元素可以有属性,多个属性需要用空格分开,属性值需要用双引号括起来(属性需要放到起始标签中)

XML文档一般3 三种写法

<?xml version="1.0" encoding="UTF-8"?>
<users>
 	<user>
		<name>张二</name>
		<job>C程序员</job>
		<nick>高级程序员</nick>
		<email>zhanger@qq.com</email>
	</user>
</users>
<?xml version="1.0" encoding="UTF-8"?>
<users>
	<user name="张一" job="菜鸟" nick="初级程序员" email="zhang@qq.com"  />
	<user name="张二" job="老鸟" nick="高级程序员" email="zhanger@qq.com"/>
</users>
<?xml version="1.0" encoding="UTF-8"?>
<users>
	<user id="1">
		<name>张一</name>
		<job>程序员</job>
		<nick>高级</nick>
		<email>zhang@qq.com</email>
	</user>
</users>

解析XML:在JDK中SUN设计了一组类与接口,用来解析XML文档(书中);SUN设计的解析XML的组件用起来不太方便,所以在实际应用,一般彩第三方解析组件(jar) ---- DOM4J

DOM4J核心组件 (org.dom4j | org.dom4j.io)
SAXReader : 读取器
Document:XML文档类
Element : XML元素
XMLWriter :写入数据类
OutputFormat:格式化类
DocumentHelper:Document助手类

默认,没添加任意约束的XML文档的编写是随意的(标签名任意,标签包含的标签设计也是随意的),这样带来的最大缺点:不好解析(不能写一段程序来解析任意结构的XML文件),文档结构混乱的,所以就需要一个结构确定的XML文件 ----- 给当前XML设计文档结构**(约束)** ------ 目前,文档结构的设计可以有2种方式

DTD:(Document Type Definition) 是一套定义语法规范; DTD可以写在文档内部(内部DTD),也可以写在文档外部(外部DTD),对外部DTD,只要在当前文档中引入进来即可

引入的语法:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users SYSTEM "txl.dtd" >
SYSTEM:表示私有 DTD ,当前DTD只服务于本项目(某一个XML文档)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
PUBLIC :表示公开的(所有项目都可以引入此约束),公开的DTD一般在框架中使用

了解DTD的语法(如何写一个DTD)

<!ELEMENT users (user*)> :ELEMENT元素设置 (根元素为users,根元素子元素名称为user,数量0个或多个)
<!ELEMENT user(name,job?,email*) :user元素有3个子元素,name元素必须有,job 0个或者1个,email0个或者多个
<!ELEMENT name (#PCDATA)> name元素的类型  #PCDATA:表示字符类型
<!ELEMENT job (#PCDATA)> 
<!ELEMENT email (#PCDATA)> 

XML Schema :

XML架构 ,相对DTD,Schema提供的设计更复杂,更全面. Schema约束本身也是一个xml文件(xsd)

<schema xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://localhost/txl"
	xmlns:tns="http://www.example.org/txl" elementFormDefault="qualified">
</schema>
xmlns="http://www.w3.org/2001/XMLSchema" : 设置本文件元素类型来自的名称空间(值不能修改)
targetNamespace="http://www.example.org/txl" :为引入此schema的xml文件服务的
elementFormDefault="qualified" :设置元素默认是否还名称空间
element :定义元素
complexType:定义复合元素|复杂元素
sequence:元素顺序出现
minOccurs="0"  :最小下线
maxOccurs="unbounded" :最大上线
......
<users 
	xmlns="http://localhost/txl"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://localhost/txl txl.xsd ">
</users>
xmlns="http://localhost/txl"  值与targetNamespace的值一致
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :告诉xml解析器,本xml使用一个xmlschema实例
xsi:schemaLocation="http://localhost/txl txl.xsd " :schema地址

5、分层开发[重要]

正常项目中的类不会放到一个包中,主要管理不方便,所以在实际项目中,类总是基于功能分包管理 --- 分层设计思想(分3层)

表示层:展示数据(窗体|网页|控制台)

业务逻辑层:业务逻辑的判断(登录) ; 如果业务层没有业务的处理,业务层只是起到数据传递的作用(接力棒)

数据层:和文件或者数据库交互的(完成数据持久化或者从文件和数据库中读取数据)

在JAVA的项目设计中,分层是通过分包体现出来;

相关推荐

PHPMailer远程命令执行漏洞分析

摘要:PHPMailer是一个强大的PHP编写的邮件发送类,但近日被爆出远程命令执行漏洞,该漏洞实际上是什么,有何种影响,本文对该漏洞进行了分析及验证方法,并给出防护方案。0x00漏洞概要PHPMa...

「安全漏洞」DedeCMS-5.8.1 SSTI模板注入导致RCE

漏洞类型SSTIRCE利用条件影响范围应用漏洞概述2021年9月30日,国外安全研究人员StevenSeeley披露了最新的DedeCMS版本中存在的一处SQL注入漏洞以及一处SSTI导致的RCE...

回顾使用PHP原生发送电子邮件(终)文件附件

FileAttachments文件附件Fileattachmentsworkjustlikemixedemail,exceptthatadifferentcontenttyp...

php-fpm.conf &amp; php.ini 安全优化实践

0x01关于php其历史相对已经比较久远了,这里也就不废话了,属弱类型中一种解释型语言除了web开发以及写些简单的exp,暂未发现其它牛逼用途,暂以中小型web站点开发为主另外,低版本的php自身...

linux 安全配置 ossec 开源检测

linux安全配置ossec开源检测一:介绍主要功能有日志分析、完整性检查、rootkit检测、基于时间的警报和主动响应。除了具有入侵检测系统功能外,它还一般被用在SEM/SIM(安全事件管理(...

PHP使用PHPMailer发送验证码邮件的方法与调用逻辑

首先我们需要下载PHPMailer:https://github.com/PHPMailer/PHPMailer一般情况下我们只需要压缩包中的src文件夹中的文件,并保存至根目录即可:设置一个文件,如...

回顾使用PHP原生发送电子邮件(一)

IwishIcouldremembertheveryfirstemailmessageIeversent.Unfortunately,thetruthisthatI...

PHPMAILER实现PHP发邮件功能php实例

这篇文章主要为大家详细介绍了PHPMAILER实现PHP发邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了PHPMAILER实现PHP发邮件功能的具体代码,供大家参考,具...

500道网络安全面试题集锦(附答案)

本篇文章内容为网络安全各个方向涉及的面试题,星数越多代表问题出现的几率越大,但是无论如何都无法覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺,然后祝各位前程似锦,都能找到自己满意的工作!一、We...

网站放家里,随处看电影「Apache+php+ssl 安装和配置」

  使用5G网络,随处都可以看到放自己家里电脑的视频。这个功能很容易实现,不需要太多的专业知识,也不需要额外花钱。如果确实需要,最多花不到两百块钱买一台旧电脑放家里,做个网站,就能解决全部问题,Fre...

Windows2008中 Magic Winmail Server提权

MagicWinmailServer是安全易用全功能的邮件服务器软件,不仅支持SMTP/POP3/IMAP/Webmail/LDAP(公共地址簿)/多域/发信认证/反垃圾邮件/邮件过滤/邮件组...

利用PHPmailer发送邮件

早上帮朋友做一个收集客户联系方式的页面,要求能实时推送信息给管理员。刚开始想到做后台管理,因为时间紧,做后台是赶不上了。想过通过短信发送,成本太高,否决了。。。灵机一动,客户提交时直接把信息发送到邮箱...

phpmailer发送邮件

phpmailer发送邮件PHP内置的mail函数使用起来不够方便,另外受其他语言的影响,博主更偏好面向对象的包管理模式,因此phpmailer成为了我用PHP发送邮件的首选,这里分享给大家。库导入这...

PHP初级教程:读取输入

PHP读取输入:Form:?formaction="welcome.php"method="post">Name:(inputtype="text...

php filter 验证Email,Url,Ip格式

今天发现一个非常好用的函数东西,filter过滤器,用于验证和过滤来自非安全来源的数据,比如用户的输入。验证Email:$email='1234567@qq.com';if(!filter_v...

取消回复欢迎 发表评论: