解决JavaWeb读取本地json文件以及乱码的问题

最近在开发项目的时候遇到一个问题,在myecilpes上使用googlede gson读取项目中的json文件成功,然后把项目发布到tomcat上再使用同样的方法,会提示“系统找不到指定的路径”

文件放在src/config/下

JsonParser parser = new JsonParser();
    JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));

在找了许多文章以后,发现问题应该是,发布到服务器之后,读取文件的相对路径并不能寻找到文件,所以只能使用绝对路径,找到在tomcat的 webapps下的项目Test

路径是

D:\Program Files\Tomcat 8.0\webapps\Test\WEB-INF\classes\Test.json 

修改读取路径之后可以读取到json文件,以下是通过单独的Java类中获得绝对路径方法,因为文件夹中有空格,所以我把其中空格部分被改变的进行替换

String path = JsonUtil.class.getClassLoader().getResource("/Test.json").getPath().replace("%20", " ");
JsonParser parser = new JsonParser();
    JsonObject object = (JsonObject) parser.parse(new FileReader(path ));

但是这样读取出来的内容却是乱码的,原因可能是系统编码格式和编译器的编码格式不一致,所以我改用流的方式读取文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.JsonArray;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
/**
 * @author LK
 */
public class JsonUtil {
/**
   * 读取本地json文件,获取json格式字符串
   * @return
   */
  public static String getJsonString(){
    String path = JsonUtil.class.getClassLoader().getResource("/Test.json").getPath().replace("%20", " ");
    File file = new File(path);
    try {
      FileReader fileReader = new FileReader(file);
      Reader reader = new InputStreamReader(new FileInputStream(file),"utf-8");
      int ch = 0;
      StringBuffer sb = new StringBuffer();
      while ((ch = reader.read()) != -1) {
        sb.append((char) ch);
      }
      fileReader.close();
      reader.close();
      String jsonString = sb.toString();
      return jsonString;
    } catch (IOException e) {
      e.printStackTrace();
      return null;
    }
  }
}

然后再把获取到的json格式的String进行解析

String jsonString = JsonUtil.getJsonString();
JsonParser parser = new JsonParser();
    JsonObject object = (JsonObject) parser.parse(jsonString);

这样就可以获取到正确的JsonObject

以上这篇解决JavaWeb读取本地json文件以及乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • javaWEB中前后台乱码问题的解决方法总结

    JAVA中几种常见的编码格式及含义: ASCII 码 学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等:32~126 是打印字符,可以通过键盘输入并且能够显示出来. ISO-8859-1 128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最

  • JavaWeb乱码问题的终极解决方案(推荐)

    前言 经常有读者在公众号上问 JavaWeb 乱码的问题,昨天又有一个小伙伴问及此事,其实这个问题很简单,但是想要说清楚却并不容易,因为每个人乱码的原因都不一样,给每位小伙伴都把乱码的原因讲一遍也挺费时间的,因此,松哥今天决定写一篇文章,和大伙好好捋捋 JavaWeb 中的乱码问题. 对于一些老司机而言,其实并不太容易遇到乱码问题,但是对于一些新手来说,乱码几乎是家常便饭,而且每当乱码时,网上搜了一大堆解决方案,发现自己的问题还是没能解决,其实这就是平时研究代码不求甚解导致的,乱码问题,也要去分

  • 解决javaWEB中前后台中文乱码问题的3种方法

    中文乱码问题真的是一个很棘手的问题,特别是从前台传到后台之后,都不知道问题出在哪里了.现在分享解决javaWEB中前后台中文乱码问题的3种方法. 方法一: tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的.所以我们从后台接收的时候要注意. 采用相同的格式去接收(ISO-8859-1),然后用能解析的编码(utf-8)去转换.这样我们就能得到能兼容中文的格式了.这样处理之后发往前台.注意:发往前台的时候也需要设置一下 resp.setContentType("text/ht

  • JavaWeb中获取表单数据及乱码问题的解决方法

    首先使用一个用户提交界面作为举例(文本框,密码框,选择,下拉表单等),效果如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="t

  • javaweb servlet中使用请求转发乱码的实现

    乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 解决方式是在执行PrintWriter out = response.getWriter();前加上 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8&

  • 解决JavaWeb读取本地json文件以及乱码的问题

    最近在开发项目的时候遇到一个问题,在myecilpes上使用googlede gson读取项目中的json文件成功,然后把项目发布到tomcat上再使用同样的方法,会提示"系统找不到指定的路径" 文件放在src/config/下 JsonParser parser = new JsonParser(); JsonObject object = (JsonObject) parser.parse(new FileReader("config/Test.json"));

  • Nodejs读取本地json文件,输出json数据接口方式

    目录 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 第二步:编写nodejs服务程序 第三步: 测试请求接口数据 nodejs读取本地json文件中文乱码 第一种方式 第二种方式 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 F:\nodejs\data\test.json {     "code": 0,     "msg": "请求成功",     "d

  • Android读取本地json文件的方法(解决显示乱码问题)

    本文实例讲述了Android读取本地json文件的方法.分享给大家供大家参考,具体如下: 1.读取本地JSON ,但是显示汉字乱码 public static String readLocalJson(Context context, String fileName){ String jsonString=""; String resultString=""; try { BufferedReader bufferedReader=new BufferedReade

  • 利用jsonp解决js读取本地json跨域的问题

    前言 本文主要给大家介绍了关于使用jsonp解决js读取本地json跨域的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 一 .问题描述 通过ajax方式读取本地json文件,谷歌浏览器会提示跨域错误,导致获取不到json数据. 跨域报错.png ajax获取json数据代码: $.ajax({ url: "file/employeejson.json",//json文件位置 type: "GET",//请求方式为get dataType:

  • jQuery ajax读取本地json文件的实例

    json文件 { "first":[ {"name":"张三","sex":"男"}, {"name":"李四","sex":"男"}, {"name":"王武","sex":"男"}, {"name":"李梅"

  • php读取本地json文件的实例

    1.data.json文件 { "goods":[ { "type":1, "name":"wow精选", "product":[ { "id":98, "name":"真皮大衣", "title":"单桶原酿酒 威士忌 新春礼盒 限量独家", "titleDesc":"苏格兰麦

  • 在vue中读取本地Json文件的方法

    其实关于这个问题,网上已经可以找到些方法,不过基本上没有完整的,或者是其中有些坑,下面写一下自己的亲身实践. 使用vue读取本地json文件需要安装vue-resource插件,然后使用它的$http.get来读取json文件. json文件应该是必须放在static目录下 然后使用npm install 命令安装vue-resource,太慢的话就使用淘宝镜像安装,安装完成后先引用这个组件. 在main.js文件中添加: import VueResource from 'vue-resourc

  • Java读取本地json文件及相应处理方法

    如下所示: //读取json文件地址 /* String path = getClass().getClassLoader().getResource("menu.json").toString(); path = path.replace("\\", "/"); if (path.contains(":")) { path = path.replace("file:/", ""); }

  • 读取本地json文件,解析json(实例讲解)

    模拟用户登录 # data.json 文件同目录下 [ { "id": 1, "username": "zhangshan", "password": "123qwe", "lock": false }, { "id": 2, "username": "lisi", "password": "123

  • iOS Swift读取本地json文件报错的解决方法

    前言 最近闲来无聊,本地了一个json读取,但没想到在用Swift测试数据发现加载本地json文件一直报以下错误: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with a

随机推荐