文档章节

Java-学习笔记

吃兔纸不吐毛
 吃兔纸不吐毛
发布于 2016/12/09 16:08
字数 787
阅读 2
收藏 0

一、IO方面:

1.文件上传-用Spring方法

public void uploadFile3(MultipartHttpServletRequest multipartRequest, String xml) throws IOException {
		MultipartFile xmlFile = multipartRequest.getFile("xmlFile");
		
		InputStreamReader reader = new InputStreamReader(xmlFile.getInputStream());
		BufferedReader br = new BufferedReader(reader);
		StringBuilder sb = new StringBuilder();
		while (br.ready()) {
			sb.append(br1.readLine().trim());// 每次循环用readLine()读取下一行
		}
    }

注意:前端JSP的form表单要加这个属性和值,<form enctype="multipart/form-data">,让Spring知道这是一个文件上传的表单。

 

2.用IO流读取文件

public void uploadFile3(String xml) throws IOException {
		String pathname = "C:\\Software\\SFA_TEST_pic\\surveyImageDetail.xml";
		File xmlFile = new File(pathname);
		InputStreamReader reader = new InputStreamReader(new FileInputStream(xmlFile)); // 建立一个输入流对象reader
		BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
		StringBuilder sb = new StringBuilder();
		while (br.ready()) {
			sb.append(br.readLine().trim());// 每次循环用readLine()读取下一行
		}
    }

 

3.页面提交表单(参数),下载文件(excel)

@RequestMapping("/downloadFile")
@ResponseBody
public void downloadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	String fileName = "QC_Difference_Photo";
	response.reset();
	response.setContentType("application/vnd.ms-excel");
	// 设置Content-disposition通知浏览器以下载方式打开文件
	response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");
	OutputStream out = response.getOutputStream();
    
	// 应用OutputStream的代码
	WritableWorkbook wwb = Workbook.createWorkbook(out);
	// 此处具体代码
	// ………………………………
	// 用好了输出并关闭
	wwb.write();
	wwb.close();
}

 

三、其他

1. 取小数点后几位

import java.text.DecimalFormat;

DecimalFormat df=new DecimalFormat(".####");// 取小数点后4位
df.format(totalErrorRate);// 参数:double类型的值,返回:String类型的值

2. 后台配合EasyUI-datagrid传值

分页工具:

import java.lang.reflect.Field;
import java.util.List;

public class PageUtil {

	public static List<Integer> paginate(List<Integer> list, int rows, int page) {
		int total = list.size();
		if (total < rows) {
			return list;
		} else if (page * rows > total) {
			return list.subList((page - 1) * rows, total);
		} else {
			return list.subList((page - 1) * rows, page * rows);
		}
	}

	public static List paginateList(List list, int rows, int page) {
		int total = list.size();
		if (total < rows) {
			return list;
		} else if (page * rows > total) {
			return list.subList((page - 1) * rows, total);
		} else {
			return list.subList((page - 1) * rows, page * rows);
		}
	}

	@SuppressWarnings("unchecked")
	public static <T> T initObject(Object obj) {
		try {
			for (Field f : obj.getClass().getDeclaredFields()) {
				f.setAccessible(true);

				if (f.getGenericType().equals(String.class)) {
					f.set(obj, "");
				}
			}

		} catch (Exception e) {
			return null;
		}
		return (T) obj;
	}

}

service接口实现调用分页工具:

@Override
public Map<String, Object> getAuditRecordListInPage(Map params, int rows, int page) {
	Map<String, Object> pageData = new HashMap<String, Object>(10);
    List<Integer> auditRecordIds = new ArrayList<Integer>();
    List<Map<String, Object>> allIds = auditSelectNonLevelMapper.getAuditRecordIdList(params);
    for (Map<String, Object> map : allIds) {
        if (map.get("ID") != null) {
        	auditRecordIds.add(NumberUtils.toInt(map.get("ID").toString()));
        }
    }
    pageData.put("total", auditRecordIds.size());
    if (auditRecordIds.size() == 0) {
        pageData.put("rows", new ArrayList<PropertyMgmt>());
    } else {
        params.put("ids", PageUtil.paginate(auditRecordIds, rows, page));
        if(rows == 0 && page == 0){
        	params.put("ids", auditRecordIds);
        }
        
        pageData.put("rows", auditSelectNonLevelMapper.getAuditRecordList(params));
    }
    return pageData;
}

传入参数是:
params:页面的参数,作为数据库查询条件的(request.getParameter(""))
rows:页面datagrid的参数,表示一页显示*条数据
page:页面datagrid的参数,表示第*页

返回值是:
HashMap<K, V>类(HashMap中有三个key,返回给前端EasyUI会自动识别):
    total:Integer类,表示总共有*条数据
    page:Integer类,表示当前页面是第*页
    rows:ArrayList<E>类(当前一页的数据,比如说前端定了20条,这里就是根据参数查找对应的20条数据):
        每一个ArrayList里都是一个HashMap<K, V>类:
        key:数据库查出来的字段名,和前端表格绑定的<th data-options="field:'key的名字'">

 

四、页面请求

1. Java传值给AJAX success方法

// java后台
import java.io.PrintWriter;

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = null;
out = response.getWriter();
out.print("timeout");
out.flush();
$.ajax({
	success: function(data){
        // 这个data的值就是'timeout'
    }
});

2. Java传值给AJAX error方法

// Java后台
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setHeader("sessionStatus", "timeout");
// 前端JS
$.ajax({
	error: function(jqXHR, textStatus, errorMsg){
		var sessionStatus = jqXHR.getResponseHeader('sessionStatus');// 值 = 'timeout'
	}
});

 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: JSTL 学习笔记
下一篇: XStream
吃兔纸不吐毛
粉丝 1
博文 58
码字总数 29471
作品 0
杭州
私信 提问
111 多线程JUC包下代码分析

Java多线程系列目录(共43篇) AtomicLongFieldUpdater:通过反射+CAS实现对传入对象的指定long字段实现类似AtomicLong的操作 http://www.cnblogs.com/skywang12345/p/javathreadscategory.ht...

素雷
2017/10/31
0
0
全新互联网Java后端开发技术思维导图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/82714797 图文里的技术如何学习,有没有免费资料? 对Java的技术,架构技术...

JAVA高级架构v
09/15
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
阿里P8架构师总结的互联网Java架构系统化学习路线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83181980 网络应用,最常见的研发语言是Java的和PHP。 后端服务,最常见的...

JAVA高级架构v
10/19
0
0
用思维导图来学java虚拟机,轻松易懂!

说明 本篇文章是对周志明的《深入理解Java虚拟机》的读书笔记,思维导图使用Mindjet MindManager。曾经看到过这样一句话: 关于教育,有一个经典的定义是:把在学校里学到的东西全部忘掉,最...

小刀爱编程
10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

腾讯与Github的魔幻会面背后的故事…

10月22日,腾讯开源管理办公室有幸邀请到Github新晋CEO Nat Friedman,前来鹅厂参观交流。目前腾讯已经有近70个项目在Github上开源,共获得17w stars,世界排名11位。Github是腾讯开源的主阵...

腾讯开源
20分钟前
1
0
单例模式

单例模式(Singleton pattern)属于创建型设计模式。 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对...

NinjaFrog
25分钟前
0
0
TypeScript基础入门之装饰器(三)

转载 TypeScript基础入门之装饰器(三) 继续上篇文章[TypeScript基础入门之装饰器(二)] 访问器装饰器 Accessor Decorator在访问器声明之前声明。 访问器装饰器应用于访问器的属性描述符,可用...

durban
43分钟前
2
0
spring5调研学习(转载)

Spring框架的新功能 这一章主要提供Spring框架新的功能和变更。 升级到新版本的框架可以参考。Spring git。 内容列表 Spring 5.x框架新的功能 Spring 4.x框架新的功能 Spring 3.x框架新的功能...

小海bug
53分钟前
2
0
为何Spring框架能这么流行?

想要学习更多关于Spring框架在Java开发者中如此流行?看这篇文章可以学到更多! Spring框架特性 Spring是用于应用开发中的一款强大,轻量级框架。更广泛地说,你可以认为Spring框架是一个定义...

java知识分子
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部