java存储数据到本地txt文件中-以及-读取txt文件的内容
创始人
2024-02-06 09:45:16
0

java存储数据,方便打印日志等

1、会覆盖以前的数据

try {File writeName = new File("D:\data.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件if(!writeName.exists()) {writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖}FileWriter writer = new FileWriter(writeName);BufferedWriter out = new BufferedWriter(writer);out.write(data);out.flush(); // 把缓存区内容压入文件out.close();
} catch (IOException e) {e.printStackTrace();
}

2、接下一行存储,数据不覆盖 

try {File file = new File("D:\data.txt");if(!file.exists()) {file.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖}FileOutputStream fos = new FileOutputStream(file,true);OutputStreamWriter osw = new OutputStreamWriter(fos);BufferedWriter bw = new BufferedWriter(osw);bw.write(data);bw.newLine();bw.flush();bw.close();osw.close();fos.close();
}catch (FileNotFoundException e1) {e1.printStackTrace();
} catch (IOException e2) {e2.printStackTrace();
}

从txt文件中读取数据:

JDK8,你可以这样,按行读取:

Path path = Paths.get("D:/aa.txt");
List  lines = Files.readLines(path);

JDK8,你可以这样,读取全部:

Path path = Paths.get("D:/aa.txt");
byte[] data = Files.readAllBytes(path);
String result = new String(data, "utf-8");

对于JDK11及以上版本,读取文本文件异常简单,我们只需要这样:

Path path = Paths.get("D:/aa.txt");
String data = Files.readString(path);
System.out.println(data);

1.读取文件的乱码问题:

使用类库:Cpdetector。

请直接添加相关jar包或者使用maven导入。

CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
codepageDetectorProxy.add(JChardetFacade.getInstance());
Charset charset = codepageDetectorProxy.detectCodepage(file.toURI().toURL());

最原始的方法:

java提供了一个FileInputStream,我们可以直接以文件路径构造这个流,也可以以文件对象构造他,如:FileInputStream fin = new FileInputStream("d:/aa.txt");

然后使用这个流就可以直接读取到文件了,但是这个时候读取到的内容是int类型的数值,所以需要进一步的处理,我们把fin外面包上一个InputStreamReader,就变成了这样:

InputStreamReader reader = new InputStreamReader(fin);

但是这一个reader读取文本并不是很方便,有一点要注意,在这一个reader的构造方法上面可以设定字符编码;接下来,使用这个reader构造BufferedReader,BufferedReader拥有一个名为readLine的方法,可以读取一整行的文本,作为字符串返回,因此用起来会比较方便。

BufferedReader buffReader = new BufferedReader(reader);

接下来就是借助循环来读取文件中的字符串了,然后,去做你想做的事情好了

import java.io*;
public class MainStart{public static void main(String args[]){String filePath = "D:/aa.txt";FileInputStream fin = new FileInputStream(filePath);InputStreamReader reader = new InputStreamReader(fin);BufferedReader buffReader = new BufferedReader(reader);String strTmp = "";while((strTmp = buffReader.readLine())!=null){System.out.println(strTmp);}buffReader.close();}
}

二进制读取方式:

2.1 使用DataInputStream:

DataInputStream din = new DataInputStream(new FileInputStream(file));
byte[] data = new byte[1024];
while(din.read(data) > 0) {// 处理数据
}
din.close();

2.2 使用RandomAccessFile

RandomAccessFile randomFile = new RandomAccessFile(file, "r");
byte[] data = new byte[1024];
while(randomFile.read(data) > 0) {// 处理数据
}
randomFile.close();

2.3两者的区别

RandomAccessFile可以通过移动文件指针改变读取的位置,可以按照几种基本类型直接读取数据,可以跳过一定的字节,整体来看,文件就像一个大的二进制数组。而DataInputStream就是单纯的输入流。

3. 大量数据的处理思路:

3.1 借助ByteBuffer使用堆外内存,在不导致oom的情况且内存充足的情况下可以大量申请内存。

3.2 借助RandomAccessFile分块读取,记录读取的最后位置,处理完毕后继续读。或者多线程处理,拆分整个文件为多个大小相等的块,分入多个子线程进入线程池并发处理。

3.3 用BufferedReader和正则,匹配到特征数据后暂停,然后处理数据,然后继续读取。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...