`
JavaSam
  • 浏览: 951812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA I/O判断读入的文件的文件编码

    博客分类:
  • JAVA
 
阅读更多
package encoding;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

public class Encoding {
	public static void main(String[] args) {
		String charset = getCharset(new File("C://login.txt"));
		System.out.println(charset);
	}

	public static String getCharset(File file) {
		String charset = "GBK";
		byte[] first3Bytes = new byte[3];
		try {
			boolean checked = false;
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
			bis.mark(0);
			int read = bis.read(first3Bytes, 0, 3);
			if (read == -1)
				return charset;
			if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
				charset = "UTF-16LE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xFE&& first3Bytes[1] == (byte) 0xFF) {
				charset = "UTF-16BE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB && first3Bytes[2] == (byte) 0xBF) {
				charset = "UTF-8";
				checked = true;
			}
			bis.reset();
			if (!checked) {
				int loc = 0;
				while ((read = bis.read()) != -1) {
					loc++;
					if (read >= 0xF0)
						break;
					if (0x80 <= read && read <= 0xBF)
						break;
					if (0xC0 <= read && read <= 0xDF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF)
							continue;
						else
							break;
					} else if (0xE0 <= read && read <= 0xEF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) {
							read = bis.read();
							if (0x80 <= read && read <= 0xBF) {
								charset = "UTF-8";
								break;
							} else
								break;
						} else
							break;
					}
				}
				System.out.println(loc + " " + Integer.toHexString(read));
			}

			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return charset;
	}
}
0
0
分享到:
评论

相关推荐

    关于I/O流读写文件

    I/O流读写文件 I/O流是Java编程语言中的一种基本概念,用于处理输入输出数据的功能。在Java中,I/O流是通过流的概念来实现的,流是一种抽象表示,用于表示输入设备或输出设备。根据不同的功能,I/O流可以分为输入流...

    linux 文件I/O编程

    在Linux系统中,文件I/O(输入/输出)编程是操作系统与应用程序交互的重要部分,它涉及到数据在程序和磁盘之间的传输。以下是对标题和描述中提到的知识点的详细解释: 1. **open()**: `open`函数是用于打开一个文件...

    用C++实现简单的文件I/O操作

    ### C++中的简单文件I/O操作详解 #### 一、ASCII输出 在C++中,进行文件的输入输出(I/O)操作是非常常见的需求。本文将详细介绍如何使用C++来进行基本的ASCII文件I/O操作。 要进行文件I/O操作,首先需要包含相应...

    Java的I_O处理技术探析.pdf

    "Java的I/O处理技术探析" Java的I/O处理技术是Java编程语言中的一种重要技术,用于处理输入和输出的数据流。Java中使用流(Stream)的形式来处理数据,流是一组有顺序的、有起点的、有终点的字节集合,是对输入和...

    文件I/O常用函数总结

    ### 文件I/O常用函数总结 #### 一、引言 在Linux C编程中,文件输入输出(I/O)是一项非常重要的技术。无论是简单的文本文件处理还是复杂的二进制数据存储,掌握基本的文件I/O函数对于任何C程序员来说都是必不可少...

    I/O流相关知识

    在Java编程语言中,输入/输出(I/O)流是一个至关重要的概念,它允许程序与外部...了解这些基本的I/O流概念和使用方法是Java程序员必备的技能,它们在处理文件、网络通信、标准输入输出等各种场景中都起着关键作用。

    Java读/写Txt文本文件的示例.rar

    JAVA对文件的操作,简单的读/写文本文件的示例,这里包含了三个例子,即  1. 将文件读入到内存(这里是StringBuffer)的例子  2. 将内容中的文本写到文件  3. 将一个文件的内容读出来写入另一个文件中  ...

    java 按顺序读取文件

    总结起来,Java中按顺序读取文件主要依赖于I/O流,特别是`FileReader`和`BufferedReader`类的组合。理解这些基本概念和操作对于任何Java开发者来说都是至关重要的,因为它们构成了处理文件数据的基础。在实际编程中...

    java实现上传文件类型检测过程解析

    因此,需要读取文件的十六进制的文件头,来判断文件真正的格式。读取文件的二进制数据并将其转换为十六进制时,同类型文件的文件头数据是相同的,即使改变了其后缀,这个数据也不会改变。 在 Java 中,可以使用 ...

    linux IO 系统的开销比较(文件逆序)

    这种传统的I/O方式使用系统调用如`open()`, `read()`, `malloc()`, `memcpy()`以及`write()`等,将文件内容读入内存,进行处理后再写回文件。这种方式的开销主要包括上下文切换、内存分配和磁盘I/O。 其次,`mmap.c...

    java 判断两个文件是否相同

    在lib目录下,虽然没有具体的文件,通常这个目录会包含项目所依赖的库文件,对于判断文件相同这样的基础操作,标准库已经足够应对,无需额外引入外部工具库。在实际项目中,如果你的文件是在特定环境中(如Web服务器...

    学会单片机和C语言编程 文件1-IO口介绍

    在读取I/O口数据时,三态缓冲器会打开,使得端口引脚上的数据可以被读入内部总线。 6. 单片机编程中的注意事项: 在使用单片机的I/O口进行编程时,需要了解每个端口的功能和特性,例如P0口的上拉电阻需求、读写操作...

    Java软件开发实战 Java基础与案例开发详解 13-1 Java IO 共9页.pdf

    根据提供的文件信息,本文将重点解析“Java软件开发实战”中的第13章关于Java I/O部分的关键知识点,包括但不限于`java.io.File`类的使用、I/O原理、流的分类以及不同类型的流(文件流、缓冲流、转换流、数据流、...

    Java Zip算法压缩多个文件的例子.rar

    Java Zip算法压缩多个文件的例子,具体的实现原理是:先打开文件并读取,然后利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件得到文件输入流,写入缓冲数据等。相关代码:  ...

    Java_输入输出流及文件读写详解.docx

    本文档对 Java 中的输入输出流和文件读写进行了详细的介绍,涵盖了 I/O 类的体系结构、字节流和字符流、InputStream 类的方法等内容,为程序员提供了深入了解 Java 中的输入输出流和文件读写的基础知识。

    浅谈Java的输入输出流.pdf

    Java 的输入输出(I/O)功能强大且灵活,为开发者提供了处理各种数据源的能力。I/O 操作涉及到的数据源包括但不限于文件、内存、网络连接等。尽管 I/O 操作强大,但其复杂性也使得编程时需要特别注意代码的组织和...

    Getting started with new io

    描述:本文将全面介绍Java中的新输入输出(NIO),一个自JDK 1.4版本引入的重要库,旨在提供高速、块导向的输入输出处理能力,相较于传统的Java I/O包,NIO通过数据缓冲和块处理技术充分利用了底层优化,无需依赖...

    如何利用Java实现QQ文件传输功能

    注意,在文件传输过程中,需要小心处理网络异常和I/O异常,并确保在操作结束后关闭资源,如关闭文件输入输出流和Socket。 4. Java中的TCP编程 除了UDP之外,TCP也是实现文件传输的常用方式。通过Socket和...

    Java压缩带有中文名的文件.rar

    Java压缩中文名的文件,大家都知道Java处理英文名的文件很强大,但是处理起中文名那可是比较麻烦了,需要经过很多步骤,这个例子可以告诉你如何简易的处理中文文件名的文件,以压缩中文文件名的文件为例。...

Global site tag (gtag.js) - Google Analytics