解决JavaWeb读取本地json文件以及乱码的问题
作者:天涯边的蜗牛 发布时间:2023-09-14 18:35:14
标签: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
来源:https://blog.csdn.net/qq_23466461/article/details/58018142


猜你喜欢
- 有了上一节中得到的正则表达式,那么就可以用来构造 NFA 了。NFA 可以很容易的从正则表达式转换而来,也有助于理解正则表达式表示的模式。一
- 简介Log4J 是 Apache 的一个开源项目(官网 http://jakarta.apache.org/log4j)
- 在style中如下面那样定义:<style name="mystyle"> <item name=&
- 数组概述 C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起
- 前面关于spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那
- 本文实例介绍了sdcard存储图片下载简单操作,分享给大家供大家参考,具体内容如下步骤 -- 在配置清单添加完联网权限后1、res/layo
- 没有阿里云数据库的可以买个最便宜的,我是新用户9.9元买了一个1.买到后点击左上角的工作台2.3. 4. 5.6.7.8
- activity动画方式在AndroidMenifest中添加activity的动画属性windowAnimationStyle <i
- 前言介绍了几篇 Hero 动画,我们来一个 Hero 动画应用案例。在一些应用中,列表的元素和详情的
- 本文实例讲述了Android APK应用安装之AndroidManifest使用PackageParser.parserPackage原理。
- 本文实例讲述了C#验证码识别基础方法,是非常实用的技巧。分享给大家供大家参考。具体方法分析如下:背景最近有朋友在搞一个东西,已经做的挺不错了
- 背景1> 大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以
- 1、简单又有效的方法是使用PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX(如:s
- WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数
- 本文实例讲述了Java中的匿名对象定义与用法。分享给大家供大家参考,具体如下:一 点睛匿名对象是指没有名字的对象。实际上,对于对象实例化操作
- 本文实例为大家分享了C#操作INI配置文件示例的具体代码,供大家参考,具体内容如下源文件地址:C#操作INI配置文件示例创建如图所示的控件:
- 这篇文章主要介绍了Spring如何使用注解的方式创建bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- import java.io.BufferedReader;import java.io.IOException;import java.i
- C# winform 新手实例:点击生成二维码效果图如下:打开exe默认界面部分代码://button点击事件private void bu
- 在 Android 中,多数情况下每个程序都是在各自独立的 Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;