Java# 日常开发中遇到的问题
Posted LRcoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java# 日常开发中遇到的问题相关的知识,希望对你有一定的参考价值。
1. BigDecimal 比较大小
// a、b 均不能为null
if (a.compareTo(b) < 0)
System.out.println("a 小于 b");
if (a.compareTo(b) == 0)
System.out.println("a 等于 b");
if (a.compareTo(b) > 0)
System.out.println("a 大于 b");
2. BigDecimal 舍入模式
使用 BigDecimal的 divide
时需要注意舍入模式(Rounding mode)
-- ROUND_UP // 向远离0的方向舍入
-- ROUND_DOWN // 向 0 方向摄入
-- ROUND_CEILING // 向正无穷方向舍入
-- ROUND_FLOOR // 向负无穷方向舍入
-- ROUND_HALF_UP // 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55 保留一位小数结果为1.6 【四舍五入】
-- ROUND_HALF_DOWN // 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 1.55 保留一位小数结果为1.5
-- ROUND_HALF_EVEN // 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用 ROUND_HALF_UP ,如果是偶数,使用 ROUND_HALF_DOWN
-- ROUND_UNNECESSARY // 计算结果是精确的,不需要舍入
示例用法:
BigDecimal a = BigDecimal.valueOf(1233);
BigDecimal b = BigDecimal.valueOf(1000);
BigDecimal divide = a.divide(b, 2, BigDecimal.ROUND_HALF_UP); // 2代表保留 2位小数
3. 解决读取文件出现乱码
-
首先将要读取的文本文件的编码格式设置为 UTF-8
-
使用
InputStreamReader
类读取文件,因为它的构造方法可以指定字符集InputStreamReader isr = new InputStreamReader(new FileInputStream("E:/demo.txt"), StandardCharsets.UTF_8); // 使用 BufferedReader 类是为了使用 readLine() 方法 BufferedReader buff = new BufferedReader(isr);
InputStreamReader 类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。
4. split() 相关问题
-
需要转义的特殊字符(在字符前面加
\\\\
)( [ / ^ - $ | ] ) ? * + .
-
底层实现
-
如果一个字符串中有多个分隔符,可以使用
|
作为连字符String str = "a=1 and b=2 or c=3"; String[] arr = str.split("and|or");
5. Druid 监控页面未授权访问
项目背景:项目中引入了 druid-spring-boot-starter,且将功能设置为开启状态
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
spring.datasource.druid.stat-view-servlet.enabled=true
此时直接在项目地址后面加: /druid/index.html
即可进入监控页面
解决方法
:
-
增加账号密码登录
spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.login-username=root spring.datasource.druid.stat-view-servlet.login-password=root123456
-
或直接禁止页面访问(或者不配置,此配置默认为 false)
spring.datasource.druid.stat-view-servlet.enabled=false
6. 获取图片的大小和尺寸
6.1 本地获取图片的大小和尺寸
/**
* 获取本地图片的尺寸,宽、高
* @param path
* @throws IOException
*/
public void getImgSizeWidthHeight(String path) throws IOException
File pic = new File(path);
BufferedImage bImg = ImageIO.read(new FileInputStream(pic));
// 源图大小
System.out.printf("%.1f\\n", pic.length() / 1024.0);
// 源图宽度
System.out.println(bImg.getWidth());
// 源图高速
System.out.println(bImg.getHeight());
6.2 获取服务器上图片的尺寸
/**
* 获取服务器上图片的宽、高
* @param imgUrl
* @throws IOException
*/
public void getImgSizeWidthHeight(String imgUrl) throws IOException
URL mUrl = new URL(imgUrl);
BufferedImage bImg = ImageIO.read(mUrl);
// 源图宽度
System.out.println(bImg.getWidth());
// 源图高速
System.out.println(bImg.getHeight());
7. 获取接口请求头里的Authorization
需要使用 org.springframework.web.context.request 包下的 RequestContextHolder 类
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes != null)
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String authorization = request.getHeader("Authorization");
8. 无效的目标发行版:xx
-
File -> Project Structure… -> Project Setting 下的 JDK版本,
共 4 处
-
若还是未解决的话,则需要在 Settings 中设置
9. 下载文件
9.1 下载网络文件
/**
* 网络文件下载
* @param fileUrl 网络文件地址
* @param outPath 保存到本地的地址
*/
public static void downloadNetFile(String fileUrl, String outPath)
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
URL url = new URL(fileUrl);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
bis = new BufferedInputStream(is);
FileOutputStream fos = new FileOutputStream(outPath);
bos = new BufferedOutputStream(fos);
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1)
bos.write(buffer, 0, len);
catch (IOException e)
e.printStackTrace();
finally
if (bos != null)
try
bos.close();
catch (IOException e)
e.printStackTrace();
if (bis != null)
try
bis.close();
catch (IOException e)
e.printStackTrace();
9.2 以流的形式下载
/**
* @param path 欲下载的文件的路径
* @param response 响应
* @return
*/
public HttpServletResponse download(String path, HttpServletResponse response)
try
File file = new File(path);
String filename = file.getName();
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
catch (IOException ex)
ex.printStackTrace();
return response;
以上是关于Java# 日常开发中遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
.NET下面的web service开发,如何读取SOAP头里面的信息?