InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("address.txt");读取文字乱码
时间: 2024-02-04 18:03:19 浏览: 34
你可以尝试指定字符编码来解决读取文字乱码的问题。在读取文件之前,将文件内容的字符编码设置为正确的编码。例如,如果文件的编码是UTF-8,可以使用以下代码:
```java
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("address.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceAsStream, "UTF-8"));
```
这样,使用UTF-8编码读取文本文件时,就能正确地处理字符编码,避免出现乱码问题。确保将实际的编码与文件的编码一致。
相关问题
private String getLocalImg(String path) throws IOException { String key = "yiqilai_coupon_default_img"; String cacheValue = redisTemplate.opsForValue().get(key); if (!StringUtils.isEmpty(cacheValue)) { return cacheValue; } //String defaultImg = this.getClass().getResource("classpath:").getPath() + "template/yiqilai/coupon_default.jpg"; InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path); try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1023]; int len; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } String base64Str = new String(Base64Utils.encode(outputStream.toByteArray()), StandardCharsets.UTF_8); redisTemplate.opsForValue().set(key, base64Str, 10, TimeUnit.MINUTES); return base64Str; } finally { inputStream.close(); } }
根据你提供的代码片段,这段代码是一个用于获取本地图片并将其转换成 Base64 编码的方法。
首先,声明了一个字符串变量 `key`,用于指定缓存中存储图片的键。
接下来,通过调用 `redisTemplate.opsForValue().get(key)` 方法从缓存中获取图片的缓存值 `cacheValue`。
然后,通过判断 `cacheValue` 是否为空,如果不为空,则直接返回缓存中的图片数据。
如果缓存中不存在图片数据,接下来的代码将会执行。
这段代码通过调用 `this.getClass().getClassLoader().getResourceAsStream(path)` 方法获取到指定路径下图片的输入流 `inputStream`。
然后,创建一个 `ByteArrayOutputStream` 对象 `outputStream` 用于存储字节数据。
接着,使用一个循环读取 `inputStream` 中的字节数据,并将其写入到 `outputStream` 中。
之后,使用 `Base64Utils.encode(outputStream.toByteArray())` 方法将字节数据进行 Base64 编码,并将结果转换为字符串类型。
接下来,使用 `redisTemplate.opsForValue().set(key, base64Str, 10, TimeUnit.MINUTES)` 方法将编码后的图片数据存储到缓存中,并设置过期时间为 10 分钟。
最后,返回 Base64 编码字符串 `base64Str`。
需要注意的是,在代码最后使用了 `finally` 块来确保输入流 `inputStream` 被关闭。这是为了避免资源泄漏。
static { try { config = new Properties(); // InputStream in = // config.getClass().getResourceAsStream("dbconnection.properties"); InputStream in = CommDAO.class.getClassLoader() .getResourceAsStream("dbconnection.properties"); config.load(in); in.close(); } catch (Exception e) { e.printStackTrace(); } }
这段代码是一个静态代码块,它在类加载时会被自动执行。它的作用是从配置文件中读取配置信息,并将其保存在静态变量config中。在这里,它首先创建了一个Properties对象,然后通过类加载器加载了名为dbconnection.properties的配置文件,并将其作为输入流传递给Properties的load()方法,从而将配置文件中的键值对读取到config对象中。最后,它关闭了输入流,释放资源。如果在读取配置文件的过程中出现异常,它会打印出异常堆栈信息。这样做的好处是可以将配置信息与代码分离,方便修改和维护,同时也可以提高代码的可读性和可维护性。
阅读全文