当前位置: 首页 > 编程日记 > 正文

java如何读写json文件

java如何读写json文件

在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml、json等)也是一种实现方式,但是这有一个弊端,因为作为静态资源存储在站内势必就导致信息的安全性很低,所以如果采用这种方式则建议记录一些安全要求很低的配置属性,当然最好的做法就是使用redis缓存技术。下面就json文件的读写进行进一步说明。

1、json通用文件读取方法,这个方法会返回map对象:

   /*** json读取* * @param request* @param path* @return*/public static List<Map> JsonRead(HttpServletRequest request, String path) {List<Map> maps = null;String dir = request.getSession().getServletContext().getRealPath(path);System.out.println(path);System.out.println(dir);if (dir == null) {System.out.println("找不到数据");return null;}try {File file = new File(dir);if (!file.exists()) {file.createNewFile();}String str = FileUtils.readFileToString(file, "UTF-8");maps = (List) JSONArray.fromObject(str);} catch (IOException e) {e.printStackTrace();}return maps;};

2、json指定文件读取方法,这个方法是针对特定的json文件,返回值也是特定的实体对象:

首先要先定义实体类(我这里就拿项目中一个demo做示例):

package com.net.entity;
/*** 系统广告图片* @author zhangdi**/
public class SysAdverImg {private int id;//方便后期数据库拓展private String img11;//首页广告1private String img12;//首页广告2private String img13;//首页广告3private String img21;//积分广告1private String img22;//积分广告2private String img23;//积分广告3private String url11;//首页广告链接1private String url12;//首页广告链接2private String url13;//首页广告链接3private String url21;//积分广告链接1private String url22;//积分广告链接2private String url23;//积分广告链接3public int getId() {return id;}public void setId(int id) {this.id = id;}public String getImg11() {return img11;}public void setImg11(String img11) {this.img11 = img11;}public String getImg12() {return img12;}public void setImg12(String img12) {this.img12 = img12;}public String getImg13() {return img13;}public void setImg13(String img13) {this.img13 = img13;}public String getImg21() {return img21;}public void setImg21(String img21) {this.img21 = img21;}public String getImg22() {return img22;}public void setImg22(String img22) {this.img22 = img22;}public String getImg23() {return img23;}public void setImg23(String img23) {this.img23 = img23;}}

第二步:针对这个特定实体类来写特定的json文件读取方法:

/** 取出广告图片内容,填充对象*/public SysAdverImg findSysAdverImg(String path) {SysAdverImg config = new SysAdverImg();String sets = ReadFile(path);// 获得json文件的内容
        System.out.println(sets);// 去掉json中的[]sets = sets.substring(1, sets.length() - 1);System.out.println(sets);JSONObject jo = JSONObject.fromObject(sets);// 格式化成json对象
        System.out.println(jo.toString());config.setId(Integer.valueOf(jo.getString("id")));config.setImg11(jo.getString("img11"));config.setImg12(jo.getString("img12"));config.setImg13(jo.getString("img13"));config.setImg21(jo.getString("img21"));config.setImg22(jo.getString("img22"));config.setImg23(jo.getString("img23"));config.setUrl11(jo.getString("url11"));config.setUrl12(jo.getString("url12"));config.setUrl13(jo.getString("url13"));config.setUrl21(jo.getString("url21"));config.setUrl22(jo.getString("url22"));config.setUrl23(jo.getString("url23"));return config;}

这里调用的ReadFile方法如下:

// 读文件,返回字符串public String ReadFile(String path) {File file = new File(path);BufferedReader reader = null;String laststr = "";try {// System.out.println("以行为单位读取文件内容,一次读一整行:");reader = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;// 一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {// 显示行号System.out.println("line " + line + ": " + tempString);laststr = laststr + tempString;line++;}reader.close();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}return laststr;}

3、特定的json文件修改(即对json文件进行写的操作)

首先是编写文件写的通用操作方法:

    // 把json格式的字符串写到文件public boolean writeFile(String filePath, String sets) {FileWriter fw;try {fw = new FileWriter(filePath);PrintWriter out = new PrintWriter(fw);out.write(sets);out.println();fw.close();out.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}

再就特定的实体类执行写的操作(这里还是以第二步的实体类为例):

    /*** 系统后台更新广告图片* @param img* @param type* @param request* @param resq* @return     200 更新成功 *                         501 上传图片为空 *                         502 上传类型为空 *                         503 无法读取json文件 *                         504 错误的类型 *                         505 json文件更新失败*                         506 上传链接为空*/@RequestMapping(value="updateAdverImgConfig" ,method=RequestMethod.POST,produces="application/json;charset=utf-8")@ResponseBody
public String updateAdverImgConfig(@RequestParam("img")String img,@RequestParam("url")String url,@RequestParam("type")Integer type,HttpServletRequest request,HttpServletResponse resq){if(img==null||img==""){return "501";//图片为空
        }if(type==null){return "502";//类型为空
        }if(url==null||url==""){return "506";//链接为空
        }//系统路径String pathRoot = request.getSession().getServletContext().getRealPath("");//网站配置路径String baseRoot = jsonUtil.findSysConfig(pathRoot+"/config/config.json").getBaseUrl();//读取出源文件SysAdverImg sai = new SysAdverImg();try {sai = jsonUtil.findSysAdverImg(pathRoot+"/config/adver_img.json");} catch (Exception e) {return "503";//无法读取源文件
        }//处理传过来的base64// 这里处理传过来的广告图片base64if(img!=""||img!=null){//图片的存储路径String newImaPath = File.separator +"img"+File.separator+"imgZip" + File.separator;String path = newImaPath+UtilNet.getRandomNumberString(24)+".jpg";//截取字符串,将data:image/jpg;base64去掉,取剩余的字符串String imgType = img.substring(11, 14);if(imgType.equals("jpe")){img = img.substring(23);}else if(imgType.equals("jpg")||imgType.equals("png")){img = img.substring(22);}else if(imgType.equals("gif")){//data:image/gif;base64,R0limg = img.substring(22);}else{img = img.substring(22);}//进行解码
            ImageBase64Util.GenerateImage(img, path,request);//赋值成绝对路径
            System.out.println(path);path = baseRoot+path;System.out.println(path);// 路径赋值switch (type) {case 0://首页广告1
                sai.setImg11(path);sai.setUrl11(url);break;case 1://首页广告2
                sai.setImg12(path);sai.setUrl12(url);break;case 2://首页广告3
                sai.setImg13(path);sai.setUrl13(url);break;case 3://积分广告1
                sai.setImg21(path);sai.setUrl21(url);break;case 4://积分广告2
                sai.setImg22(path);sai.setUrl22(url);break;case 5://积分广告3
                sai.setImg23(path);sai.setUrl23(url);break;default:return "504";}}//写入json文件中        String config = "[{"+"\n"+" \"" +"id"+"\" "+":"+" \""+sai.getId()+"\","+"\n"+" \"" +"img11"+"\" "+":"+" \""+sai.getImg11()+"\","+"\n"+" \"" +"img12"+"\" "+":"+" \""+sai.getImg12()+"\","+"\n"+" \"" +"img13"+"\" "+":"+" \""+sai.getImg13()+"\","+"\n"+" \"" +"img21"+"\" "+":"+" \""+sai.getImg21()+"\","+"\n"+" \"" +"img22"+"\" "+":"+" \""+sai.getImg22()+"\","+"\n"+" \"" +"img23"+"\" "+":"+" \""+sai.getImg23()+"\","+"\n"+" \"" +"url11"+"\" "+":"+" \""+sai.getUrl11()+"\","+"\n"+" \"" +"url12"+"\" "+":"+" \""+sai.getUrl12()+"\","+"\n"+" \"" +"url13"+"\" "+":"+" \""+sai.getUrl13()+"\","+"\n"+" \"" +"url21"+"\" "+":"+" \""+sai.getUrl21()+"\","+"\n"+" \"" +"url22"+"\" "+":"+" \""+sai.getUrl22()+"\","+"\n"+" \"" +"url23"+"\" "+":"+" \""+sai.getUrl23()+"\""+"\n"+"}]";boolean isUpdate = jsonUtil.writeFile(pathRoot+"/config/adver_img.json", config);if(isUpdate){return "200";}else{return "505";}}    
}

至此关于json文件的读写就完成了

posted on 2017-09-25 09:37 <&nbsp/> 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/zhangdiIT/p/7590472.html

相关文章:

C#数组篇讲解

数组是我们经常用到的&#xff0c;我来介绍一下&#xff1a;数组是具有相同类型的一组数据。当访问数组中的数据时&#xff0c;可以通过下标来指明。c#中数组元素可以为任何数据类型&#xff0c;数组下标从0开始&#xff0c;即第一个元素对应的下标为0&#xff0c;以后逐个递增…

Spring AOP详解(转载)所需要的包

上一篇文章中&#xff0c;《Spring Aop详解&#xff08;转载&#xff09;》里的代码都可以运行&#xff0c;只是包比较多&#xff0c;中间缺少了几个相应的包&#xff0c;根据报错&#xff0c;几经百度搜索&#xff0c;终于补全了所有包。 截图如下&#xff1a; 在主测试类里面…

Mendix 披露低代码方法论,解读真实技术趋势

作者 | 宋慧头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;在 2021年初正式宣布进入中国市场之后&#xff0c;Mendix 在近日向媒体重点披露了关于低代码的技术方法论&#xff0c;以及近四个月在中国市场的进展。Mendix 的低代码技术方法论对于…

PHP中foreach详细解读

oreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象&#xff0c;如果尝试应用于其他数据类型的变量&#xff0c;或者未初始化的变量将发出错误信息。有两种语法&#xff1a; foreach (array_expression as $value) statement foreach (array_expression…

Android ViewPager使用具体解释

这是谷歌官方给我们提供的一个兼容低版本号安卓设备的软件包&#xff0c;里面包囊了仅仅有在安卓3.0以上能够使用的api。而viewpager就是当中之中的一个利用它&#xff0c;我们能够做非常多事情&#xff0c;从最简单的导航&#xff0c;到页面菜单等等。那怎样使用它呢&#xff…

实时音视频的超级风口,开发者的机会在哪里?

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse&#xff0c;又以肉眼可见的速度跌落神坛&#xff0c;下载量从2月的960 万/月跌至4月的92万/月。不过在5月&#xff0c;Clubhouse终于推出了安卓版&#xff0c;并表示接下来也会对所有用户开放。 另一边&#xff0c…

高可用集群之分布式文件系统

一、分布式文件系统和单机文件系统的区别&#xff1a;单机文件系统的分区只能被一台主机所挂载&#xff0c;不能同时被多台主机挂载使用&#xff0c;因为单机文件系统是通过系统内核层的锁机制来完成的&#xff0c;所以一个系统上可以有多个进程访问&#xff0c;但只能在一个时…

C#中基本知识

当数据转换到asp.net页面时&#xff0c;大部分都是以文本的形式存在的。有时候为了输出&#xff0c;单单使用显示或者隐式转换都是不行的&#xff0c;就需要本节说到的数据转换。 字符串输出&#xff1a; int intAge21; string strAgeintAge.ToString(); 转换DateTime值时&…

索引系列八--索引特性之有序难优化union

----UNION 是需要排序的drop table t1 purge;create table t1 as select * from dba_objects where object_id is not null;alter table t1 modify OBJECT_ID not null;drop table t2 purge;create table t2 as select * from dba_objects where object_id is not null;alter t…

OpenCV 实战:3 步实现图像降噪

来源 | 小白视觉志 头图 | 下载于视觉中国本文将展示如何通过三个简单的步骤来实现降噪。我们将使用机器学习训练的降噪模型&#xff0c;最好的降噪模型之一。程序可以判断图像是否有噪点吗&#xff1f;这应该是一个很有创意的想法&#xff0c;因为我们的降噪模型不够智能&…

一条数字链路连接的端口无法UP及后续相应故障的排除

故障现象1&#xff1a; 运营商检测线路正常&#xff0c;但是端口无法up。 解决办法&#xff1a; 1、翻转端口 2、将端口速率强制为1000M&#xff0c;全双工#speed 1000 #dup full 端口正常UP。 故障现象2&#xff1a; 线路丢包5%。 解决办法&#xff1a; 1、检查端口光功率&…

华为:HarmonyOS 即将开源!

整理 | 晋兆雨出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;5 月 24 日&#xff0c;在鸿蒙开发者创新大赛颁奖典礼上&#xff0c;华为消费者业务软件部总裁王成录宣布&#xff1a;HarmonyOS 将会开源开放&#xff0c;并在武汉大学等15个学校开展 HarmonyOS 课程。…

C#实现网段扫描

摘要 想必大家对小榕时光等扫描器都非常熟悉了&#xff0c;有没有自己写一个的冲动。最近微软推实施了.NET战略方案&#xff0c;C#是主推语言&#xff0c;你们是否有兴趣用C#来实现对局域网IP地址的扫描&#xff0c;尝试一下自己写的快乐&#xff0c;那么请跟我来。 正文 1.先介…

sbt配置nexus仓库

2019独角兽企业重金招聘Python工程师标准>>> 最近学习Scala&#xff0c;不可避免的要用到sbt。爱折腾的我把原本比较简单的事情搞的复杂了&#xff0c;来来回回搞了好久&#xff0c;记录下来&#xff0c;有同样爱折腾的盆友可以参考下。 sbt在windows下如果是默认安…

C#编程(十二)----------函数

类和结构 类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。 类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。 例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含…

Linux很实用的命令查找软件安装目录

#whereis php #which php #php -v 查看版本号 差异自己去体会

Python 库突发 PyPI 危机!

‍‍整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;据 BleepingComputer 报道&#xff0c;Python 官方软件包存储库 PyPI 遭受了黑客攻击&#xff0c;攻击者通过注入垃圾邮件包的形式发起了洪水攻击。这些垃圾邮件及软件包用电影、电视节目名称命名&…

scala入门之代码补全

为什么80%的码农都做不了架构师&#xff1f;>>> 在scala的shell命令行中&#xff0c;我们可以使用像Linux那样的代码补全功能。Linux中是使用Tab键补全&#xff0c;scala的shell命令行也是使用这个键。例如&#xff0c;我们在“ssss”这个字符串上调用toUpperCase方…

pycharm第一个Python程序

print ("Hello word!"); 这是Python3.xx的语法&#xff01;

C#枚举系统安装的所有打印机

在下面的程序中我们将把系统中所安装的打印机用列表框列出来&#xff0c;同时为默认打印机设置缺省值。 在下面的程序中我们用到了两个主要的类&#xff0c;把所有的打印机列表出来用到了PrinterSettings 类,获取系统默认打印机用到了PrintDocument 类&#xff0c;下面我们就动…

编译安装linux内核步骤

编译安装linux内核步骤&#xff1a; 一.获取内核源码 源码网址&#xff1a;www.kernel.org 二.解压内核源码 首先以root帐号登录&#xff0c;然后进入/usr/src子目录。如果用户在安装Linux时&#xff0c;安装了内核的源代码&#xff0c;则会发现一个linux-x.y.z的子目录。该目录…

遏制企业数据泄露之殇,大咖切磋云安全的攻防之道

整理 | 寇雪芹出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;5 月 7 日&#xff0c;美国最大燃油管道、东部地区油气输送主动脉 Colonial Pipeline 计算机系统被黑客入侵和勒索&#xff0c;导致美国17个州和华盛顿特区进入紧急状态。这次黑客入侵无异于一记重拳&am…

【NOIP2016】愤怒的小鸟

Description Kiana最近沉迷于一款神奇的游戏无法自拔。 简单来说&#xff0c;这款游戏是在一个平面上进行的。 有一架弹弓位于(0,0)处&#xff0c;每次Kiana可以用它向第一象限发射一只红色的小鸟&#xff0c;小鸟们的飞行轨迹均为形如y ax^2 bx的曲线&#xff0c;其中a, b是…

“智能”基石:人工智能数据标注与训练,是决定智能时代的第一步

记者 | 邓晓娟 2021年5月20日~23日&#xff0c;由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导&#xff0c;深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心&#xff0…

C#中对POP3邮件解码

Base64和下面将要介绍的Quoted-Printable都属于MIME &#xff08;多部分( multi-part)、多媒体电子邮件和 WWW 超文本的 一种编码标准&#xff0c;用于传送诸如图形、声音和传真等非文本数 据&#xff09;。MIME定义在RFC1341中。 Base64是现今在互联网上应用最多的一种编码…

php 命中算法

function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递

1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面&#xff0c;让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…

C#调用控制面板选项

因为C#是由Microsoft公司推出的&#xff0c;所以它对Microsoft的所有产品的兼容性与相互操作性是其它公司开发出的编程语言所不及的。Microsoft开发的Windows操作系统与C#之间的关系也非常紧密。从而实现了C#对Windows的无缝操作。 下面&#xff0c;我们就以“C#对Windows控制面…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?

5月27日20点&#xff0c;第 13 期「大咖来了」&#xff01; CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉&#xff0c;多方视角探讨 RTC 超级风口与机遇&#xff0c;还有众多精美礼品等你拿&#xff01; 立即戳&#xff1a;https://live.csdn.net/room/csdnnews/cn…

查询/新建/修改本地用户和组

通过ADSI新建用户user2&#xff1a; 1 #创建新用户&#xff0c;创建完成后的新用户不隶属于任何组2 $computerName$env:computername3 #定义用户名、密码、描述信息4 $username"user2"5 $userpass"password"6 $userdesc"description"7 $ADSI [A…