在项目中遇到要读取文本文件内容然后批量查询,但每当在后台读取上传文件流时,第一个内容总会有一个?如:
?test0
test1
而实际内容应该是:
test0
test1.
经过查找资料,有了下面解决方式:
BufferedReader nickContent = new BufferedReader(new UnicodeReader(mFileItem.getInputStream(),Charset.defaultCharset().name()));
UnicodeReader.java
import java.io.*;
/**
* Generic unicode textreader, which will use BOM mark
* to identify the encoding to be used. If BOM is not found
* then use a given default or system encoding.
*/
public class UnicodeReader extends Reader {
PushbackInputStream internalIn;
InputStreamReader internalIn2 = null;
String defaultEnc;
private static final int BOM_SIZE = 4;
/**
*
* @param in inputstream to be read
* @param defaultEnc default encoding if stream does not have
* BOM marker. Give NULL to use system-level default.
*/
public UnicodeReader(InputStream in, String defaultEnc) {
internalIn = new PushbackInputStream(in, BOM_SIZE);
this.defaultEnc = defaultEnc;
}
public String getDefaultEncoding() {
return defaultEnc;
}
/**
* Get stream encoding or NULL if stream is uninitialized.
* Call init() or read() method to initialize it.
*/
public String getEncoding() {
if (internalIn2 == null) return null;
return internalIn2.getEncoding();
}
/**
* Read-ahead four bytes and check for BOM marks. Extra bytes are
* unread back to the stream, only BOM bytes are skipped.
*/
protected void init() throws IOException {
if (internalIn2 != null) return;
String encoding;
byte bom[] = new byte[BOM_SIZE];
int n, unread;
n = internalIn.read(bom, 0, bom.length);
if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
(bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
encoding = "UTF-32BE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
(bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
encoding = "UTF-32LE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
(bom[2] == (byte)0xBF) ) {
encoding = "UTF-8";
unread = n - 3;
} else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
encoding = "UTF-16BE";
unread = n - 2;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
encoding = "UTF-16LE";
unread = n - 2;
} else {
// Unicode BOM mark not found, unread all bytes
encoding = defaultEnc;
unread = n;
}
//System.out.println("read=" + n + ", unread=" + unread);
if (unread > 0) internalIn.unread(bom, (n - unread), unread);
// Use given encoding
if (encoding == null) {
internalIn2 = new InputStreamReader(internalIn);
} else {
internalIn2 = new InputStreamReader(internalIn, encoding);
}
}
public void close() throws IOException {
init();
internalIn2.close();
}
public int read(char[] cbuf, int off, int len) throws IOException {
init();
return internalIn2.read(cbuf, off, len);
}
}
相关推荐
解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new ...
"Java读取TXT文本文件乱码解决方案" Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,...
java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...
在Java编程中,读取包含中文字符的...通过理解和应用这些知识点,你可以有效地解决Java读取文件时出现的中文乱码问题。在实际开发中,对文件编码的理解和处理是至关重要的,能够确保程序正确地处理各种语言和字符集。
### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
如果不进行正确的编码转换,就可能会出现中文乱码问题。Java 提供了多种编码方式,例如 UTF-8、GBK、ISO-8859-1 等。在读取和写入文件时,需要选择合适的编码方式,以避免中文乱码。 在给定的代码中,使用了 UTF-8 ...
了解了这些基础知识后,我们就能有效地处理Java读取文件时可能出现的乱码问题。在编写代码时,始终注意文件编码的设定,尤其是在处理跨平台或多语言内容时,使用Unicode(如UTF-8)作为标准编码通常是个好选择。通过...
在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...
不同的操作系统、软件可能使用不同的默认编码格式,这就会导致在跨平台或跨软件间读写文件时出现乱码问题。因此,在处理文件时,明确指定文件的编码格式是十分重要的。 #### 三、Java读取XML文件 对于XML文件的读取...
当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....
使用cpdetector,开发者可以避免因文件编码不明确而产生的乱码问题,确保程序能正确处理各种类型的文本文件。 在Java中,我们可以按照以下步骤使用cpdetector: 1. **引入依赖**:首先,需要将cpdetector的jar包...
在Java编程中,判断文件编码格式是一项常见的任务,特别是在处理包含多国语言或者用户自定义内容的文件时。本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用...
要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....
总结,解决Java读取文件时的乱码问题,关键在于明确文件的编码格式并正确地在代码中指定。通过使用不同的IO类库和工具,以及自定义的编码检测方法,我们可以有效地处理各种编码的文件,确保数据的正确性。
在Java中,`java.util.zip`包提供了对ZIP文件的基本操作,但默认使用的是平台默认的字符集,这可能在跨平台操作时引发乱码问题。 为了解决这个中文乱码问题,我们需要在创建ZipEntry时指定合适的字符集,通常是UTF-...
java 识别文件的编码格式 读取文件的编码 utf-8 gbk gb2312 java 编码 java 获取文件编码格式 java 乱码查找
该项目包含了项目所需要的jar包以及测试案例。项目使用环境为eclipse jdk1.8 1.poi.Testpoi为测试用例;...3.解决了javadbf读取dbf文件表头和数据乱码问题,com.webadmin.util.dbf.DBFReaderTest为测试用例。
在Java编程中,读取配置文件是常见的任务,特别是在开发需要灵活配置的系统时。配置文件通常用于存储应用程序的设置...确保正确处理异常,保证资源及时关闭,以及在读取配置文件时考虑到安全问题,避免硬编码敏感信息。