逐行读取。
首先获取文件的编码格式;
读取文件内容。
log4j-1.2.17.jar
slf4j-api-1.4.3.jar
slf4j-log4j12-1.4.0.jar
1. 获取文件的编码格式
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TxtCommonMethods { private static final Logger log = LoggerFactory .getLogger(TxtCommonMethods.class); /** * @Title: getFileCharset * @Description: 判断文件的编码格式 * @param filePath * 文件绝对路径 * @return String * @author * @date 2015年12月26日 */ public static String getFileCharset(String filePath) { File file = new File(filePath); if (!file.exists()) { System.out.println("File not found."); } // 默认编码格式为GBK String charset = "GBK"; FileInputStream is = null; BufferedInputStream bis = null; try { byte[] first3Bytes = new byte[3]; boolean checked = false; is = new FileInputStream(file); bis = new BufferedInputStream(is); bis.mark(0); int read = bis.read(first3Bytes, 0, 3); if (-1 == read) { charset = "GBK"; } else 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) { // 单独出现BF以下的,也算GBK break; } if (0x80 <= read && read <= 0xDF) { read = bis.read(); if (0x80 <= read && read <= 0xBF) { // GBK 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; } } } } } catch (FileNotFoundException e) { log.error( "Get charset of '" + filePath + "' fail:" + e.getMessage(), e); } catch (IOException e) { log.error( "Get charset of '" + filePath + "' fail:" + e.getMessage(), e); } catch (Exception e) { log.error( "Get charset of '" + filePath + "' fail:" + e.getMessage(), e); } finally { TxtIOUtils.closeStream(bis, null); TxtIOUtils.closeStream(is, null); } return charset; } }
2. 读取文件内容
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ReadLoadTxtFileRunnable implements Runnable { private static final Logger log = LoggerFactory .getLogger(ReadLoadTxtFileRunnable.class); private String filePath; public ReadLoadTxtFileRunnable(String filePath) { this.filePath = filePath; } @Override public void run() { this.read(filePath); } /** * @Title: read * @Description: 读取txt文件内容 * @param filePath * 文件绝对路径 * @return List * @author * @date 2015年12月26日 */ private void read(String filePath) { log.info("Read Whole Grid Load txt file,filePath=" + filePath); filePath = null == filePath ? null : filePath.trim(); if (null == filePath || "".equals(filePath)) { log.error("The filePath is null."); return null; } InputStream is = null; Reader reader = null; BufferedReader bufRead = null; try { is = new FileInputStream(filePath); // 判断文件的编码格式 String charset = TxtCommonMethods.getFileCharset(filePath); log.info("The charset of '" + filePath + "' is:" + charset); reader = new InputStreamReader(is, charset); bufRead = new BufferedReader(reader); String line = null; String[] arrs = null; while ((line = bufRead.readLine()) != null) { System.out.println(line); } } catch (FileNotFoundException e) { log.error("Read file '" + filePath + "' fail:" + e.getMessage(), e); } catch (UnsupportedEncodingException e) { log.error("Read file '" + filePath + "' fail:" + e.getMessage(), e); } catch (IOException e) { log.error("Read file '" + filePath + "' fail:" + e.getMessage(), e); } catch (Exception e) { log.error("Read file '" + filePath + "' fail:" + e.getMessage(), e); } finally { TxtIOUtils.closeReader(bufRead); TxtIOUtils.closeReader(reader); TxtIOUtils.closeStream(is, null); } log.info("End of Read Whole Grid Load txt file"); } }
3.TxtIOUtils.java
public class TxtIOUtils { private static final Logger log = LoggerFactory.getLogger(TxtIOUtils.class); public static void closeStream(InputStream is, OutputStream out) { if (null != out) { try { out.close(); } catch (IOException e) { log.error("Close OutputStream fail:" + e.getMessage(), e); } out = null; } if (null != is) { try { is.close(); } catch (IOException e) { log.error("Close InputStream fail:" + e.getMessage(), e); } is = null; } } public static void closeReader(Reader reader) { if (null != reader) { try { reader.close(); } catch (IOException e) { log.error("Close Reader fail:" + e.getMessage(), e); } reader = null; } } public static void closeWriter(Writer writer) { if (null != writer) { try { writer.close(); } catch (IOException e) { log.error("Close Reader fail:" + e.getMessage(), e); } writer = null; } } public static void closeChannel(Channel c) { if (null != c) { try { c.close(); } catch (IOException e) { log.error("Close Channel fail:" + e.getMessage(), e); } c = null; } } }
相关推荐
在Java编程中,读取TXT文件并将其内容存入数据库是一项常见的任务,特别是在数据处理、日志分析或者导入批量数据的场景下。以下是一个详细的知识点解析,涵盖了如何使用Java来实现这一操作。 1. **读取TXT文件** -...
6. 通过`BufferedReader`的`readLine()`方法逐行读取文件内容。 7. 存储和处理读取到的数据。 这个过程对于理解和实现Java中文件读取的基本逻辑非常有帮助,适用于大多数简单的文本文件读取场景。当然,Java IO库...
下面我们将深入探讨Java IO读取文件的技术及其在大数据场景下的应用。 1. **基础概念** - **流(Stream)**:Java IO基于流的概念,流是一组有序的数据序列,可以是字节流或字符流。数据从源(如文件)流向目的地...
在Java中,读取文件主要依赖于`java.io`包中的类,如`FileReader`和`BufferedReader`。这些类提供了处理文件输入的基本功能。`FileReader`用于读取字符文件,而`BufferedReader`则在`FileReader`的基础上添加了缓冲...
1. **导入必要的包**:如`java.io.BufferedReader`, `java.io.FileReader`, `java.io.IOException`等,这些类提供了读取文件的功能。 2. **创建文件对象**:使用`File`类创建一个指向TXT文件的`File`对象。 3. **...
在Java中读取文件之前,首先需要导入一些必要的包,这些包提供了处理文件的基本工具。在这个例子中,涉及到的包有: - `java.io.File`: 用于创建文件对象,便于操作文件路径。 - `java.io.FileInputStream`: 用于...
`FileInputStream`是Java中的一个类,位于`java.io`包内,专门用于读取文件的原始字节流。 #### 四、打开文件 通过`fis = new FileInputStream("e:\\1.txt");`这行代码,程序尝试打开位于`e:\1.txt`路径下的文件。...
java利用io技术创建文件夹、读取txt文件、写入txt文件(覆盖、不覆盖均有)
`创建一个`File`对象,然后用`BufferedReader`或`Scanner`来读取文件内容。`BufferedReader`适用于大文件,因为它可以一次性读取一行,而`Scanner`则适合逐字符或逐词读取。 2. **字符串处理**:`StringToDB.java`...
在Java编程环境中,读取PDF文件中的内容是一个常见的任务,特别是在处理文档自动化或者数据分析时。PDF(Portable Document Format)是一种跨平台的文件格式,用于精确地保留文档的格式和内容。下面将详细介绍如何...
Java中`java.io.FileInputStream`类提供了按字节读取文件的功能。这种方法适用于读取二进制文件,例如图像、音频或视频文件。下面的代码示例展示了如何按字节读取文件: ```java FileInputStream in = new ...
然后,它使用`readLine()`方法逐行读取文件内容,并将其打印到控制台。注意使用try-with-resources语句来确保资源在使用完毕后会被正确关闭。 接下来,我们讨论如何新建一个TXT文件。Java的`java.io`包提供了`...
在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...
使用`java.nio.FileChannel`类创建一个文件通道,这允许我们以非阻塞的方式读取文件。通过`Files.newByteChannel()`方法可以从`java.nio.file.Paths`中获取文件通道。 ```java FileChannel fileChannel = Files....
这段代码创建了一个`File`对象,然后使用`FileReader`和`BufferedReader`来逐行读取文件内容。`readLine()`方法会返回文件中的一行,直到文件结束。 接下来,我们讨论文件移动。Java标准库并没有直接提供文件移动的...
- 在Java中读取文件时,可以使用相对路径或绝对路径。如果文件在`src`目录下,且你的代码在同一目录层次,可以使用相对路径。否则,可能需要使用绝对路径,或者利用类路径的特性。 5. **使用`ClassLoader`读取资源...
在Java中,`java.io.File`类用于表示文件路径,而`java.io.FileInputStream`类则是用于读取文件数据的基础类。通过创建`FileInputStream`实例对象,可以打开一个文件并进行读取操作。 ##### 2.2 字符流(Reader) ...
### Java读取资源文件时内容过长与换行的处理 在Java开发过程中,经常会遇到需要读取资源文件的情况,比如配置文件、属性文件等。这些文件中的内容有时会非常长,或者为了提高可读性,需要进行换行处理。本文将详细...
然后,我们使用`readLine()`方法逐行读取文件内容,并打印出来。注意使用try-with-resources语句,这样可以确保在读取完成后自动关闭流。 接下来,我们讨论如何读取XML文件。Java提供了`javax.xml.parsers`包,包含...
"Java去重txt文件内容(按行)"这个主题涉及到如何利用Java语言有效地读取TXT文件,并通过比较两份文件的内容来消除重复的行。在这个过程中,Java 8引入的新特性——流(Stream)和并行流(Parallel Stream)起到了关键...