深入理解java2:软件开发常用实用技术
1文件及目录:java.io
1.1基本操作
File f;
f=new File("a.txt");//当前目录下的文件
f=new File("e:\\ex\\","a.txt");//目录+文件
//目录也当做文件处理
File path=new File("e:\\ex\\");
File f=new File(path,"B.txt");
1.2常用操作函数
1.3RandomAccessFile:随机指定到文件中某个位置
2正则表达式
2.1基本概念:
写法分3部分:1哪类字符 2{数量}3位置
java
[0-9]{2,4}\b--匹配123 1988 20015 16
第1部分
.--通配
[]--字符集
[^]--排斥字符集
\d--[0-9]
\D--[^0-9]
\s--空白符
\S--非空白符
\w--[a-zA-Z0-9]单词字符
\W--[^\w]
第二部分
*--0或多个
+--1或多个
?--0或1次
n--n次
第三部分
\b--单词边界
()--组号
实例:
//匹配网址:\b(href)=('[^']+');//实际使用时还要\转义
2.2基本应用:java.util.regex
//分割
Pattern p=Pattern.compile("[,\\s]+");
String[] result=
p.split("one,two,three four,five");
//匹配
boolean ok=Pattern.matches(patternString,String a);
Pattern pattern=;
String text=;
Matcher matcher=pattern.matcher(text);
StringBuffer buffer;
//对每个匹配到单元
while(matcher.find()){
//匹配单元的整个
buffer.append(matcher.group());
//匹配单元的第二对括号
buffer.append(matcher.group(2));
}
2.3举个例子:网络爬虫
输入流:
正则:
容器:
线程:
3图形界面
3.1基本知识
界面:java.awt;javax.swing
组件:容器和非容器
容器:顶层容器和非顶层容器
3.2实现界面三部曲:Eclipse-new-Other-windowsbuilder。。
创建组件
public class myjframe extends JFrame{
JLabel lb1;
public myjframe(){
super("Test JFrame");
//new组件
lb1=new JLabel("hello swing");
//添加
getContentPane().add(lb1);
//设置属性
setSize(300,200);
//默认关闭按钮
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
main{
new myjframe().setVisible(true);
}
}
布局
//FlowLayout:流动式自动换行
//左对齐,并设置间距
setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
//BorderLayout:方框式分几个框
setLayout(new BorderLayout());
//加入时要设置NORTH SOUTH EAST WEST CENTER
add(b1,BorderLayout.NORTH);
//网格式,分成相等的网格,要行数和列数
setLayout(new GridLayout(4,5));
//一般组件加入到面板中,使用面板布局
//之后面板在加入到JFrame中,使用JFrame的布局
创建事件:添加事件处理器
//new 一个ActionListener,匿名类或者lambda方式
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//逻辑代码
}
})
//lambda
b2.addActionListener((e)->{});
//事件的方法
e.getSource();
//各种不同的listener与Adapter
//实现Listener的不同方法
//匿名类使用最多
//一个重写-lambda
组件对象和监听器:一对多,多对一(e.getSource())
更新界面:线程里面(几乎所有情况)更新界面都要
SwingUtilities.invokeLater(()->{})
3.3举个例子:
1. 小小计算器
2. 排块游戏
3. 文本编辑器
4网络
4.1URL:java.net.URL
URL url=new URL("www.xxx.xxx");
InputStream stream=url.openStream();
4.2第三方库:httpclient
引入库:buildPath-add external archives
Requset操作
//httpclient得到网页
String str= Request.Get("xxx").execute()
.returnContent().asString();
//得到图片
BufferedImage img=ImageIO.read(new URL(imageURL));
ImageIO.write(img,"gif",new File("d:\\aaa.gif"));
举个例子:获取建议词
4.3实现底层网络通信Socket,ServerSocket
- 客户端和服务端:
- 举个例子:多线程聊天室
5多媒体
5.1绘图
- Graphics 及Graphics2D
- 画图片
5.2音视频
- 音乐播放器
- 视频播放器
6数据库
6.1基础知识:数据库管理系统
- 共享性独立性完整性冗余数据少
- 数据定义、操纵、完整、安全、并发
- 关系型数据库:表的形式
SQL语句:字符串用”,表名字段名用[]括起来,结尾不用;
select * from [table] where .. group by|order by insert into [table] (field,..) values(content,..) update [table] set field=...where ... delete from [table] where ... CREATE TABLE [tablename] (field1,.2,.3,..) DROP TABLE [tablename]
6.2jdbc:java访问数据库的基本技术,增加相应驱动程序
//调用jdbc接口,忽略底层实现
//加载驱动程序
Class.forName("xxx.jdbc");
//得到与数据库的连接
String connString="jdbc:sqlite:d:/test.db";
//Connection 类实例,表示与数据库的连接
Connection conn=DriverManager.getConnection(connString);
//自动提交false
conn.setAutoCommit(false);
//得到一个Statement对象,表示一条数据库语句
Statement stmt=con.createStatement();
//执行非查询excuteUpdate
stmt.executeUpdate("delete from table");
//手动提交
conn.commit();
//执行查询的excuteQuery,rs是其返回结果集
ResultSet rs=stmt.executeQuery("select from ");
//访问结果集,按行遍历
while(rs.next()){
//也可以用从1开始的字段顺序号
int i=rs.getInt("field1");
String s=rs.getString("field2");
//do something
}
rs.close();
//stmt.close();
conn.close();
6.3基于数据库的应用:C/S模式
client通过sql向server发送请求
使用PreparedStatement:快速,避免sql注入攻击
String sql2="select ..where like ? and age>?";
//预先编译的查询语句
PreparedStatement pstmt=connection.prepareStatement(sql2);
//可以调整参数,%是sql任意字符
pstmt.setString(1,"%r%");
//调整参数2,从1开始编号
pstmt.setString(2,18);
//执行,sql语句已经编译好
ResultSet rs=pstmt.excuteQuery();
显示数据标:JTable
//见代码文件
举个例子:小小通讯录
1. 界面参数转为sql语句
2. 数据访问对象DAO,封装查询和数据对象