添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
* @return List> readFileAppointLine(String filePathName, Integer line) throws Exception;
package com.chuangqi.tool.readFile;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
 * @Description 读取txt文件
 * @Author qizhentao
 * @Date 2020/3/12 13:58
 * @Version 1.0
public class ReadTxt implements ReadStrategy {
    @Override
    public List<List<Object>> readFileAppointLine(String filePathName, Integer line) throws Exception {
        int index = 0; // 索引
        if(line == null){
            line = 50; // 如果不传入显示多少行,则默认展示50行
        // 读取文件
        FileInputStream fileInputStream = new FileInputStream(filePathName);
        Scanner scanner = new Scanner(fileInputStream) ;
        // 获取文件第一行数据,设为title
        String nextLine = scanner.nextLine();
        // title内容
        String [] title = nextLine.split("\\s+");
        // 列数
        int lineNumber = title.length;
        // 封装最终数据
        List<List<Object>> list = new ArrayList<>(lineNumber);
        list.add(Arrays.asList(title));
        // 用于存储每行数据
        List<Object> lineList = new ArrayList();
        while(scanner.hasNext()){
            // 展示指定行数据
            if(line != 0 && index >= (lineNumber * line)){
                // 打印最终封装的数据
                for (List li:list) {
                    Console.log(li);
                fileInputStream.close();
                scanner.close();
                return list;
            lineList.add(scanner.next());
            // 读取完一行数据
            if (++index % lineNumber == 0){
                list.add(lineList);
                lineList = new ArrayList();
                //System.out.println(world);
                continue;
            //System.out.print(world + "   ");
        fileInputStream.close();
        scanner.close();
        return list;
package com.chuangqi.tool.readFile;
import java.util.List;
 * @Description 读取dat文件
 * @Author qizhentao
 * @Date 2020/3/12 14:08
 * @Version 1.0
public class ReadDat implements ReadStrategy{
    @Override
    public List<List<Object>> readFileAppointLine(String filePathName, Integer line) throws Exception {
        ReadTxt readTxt = new ReadTxt();
        return readTxt.readFileAppointLine(filePathName, line);
package com.chuangqi.tool.readFile;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import java.util.List;
 * @Description 读取xls文件
 * @Author qizhentao
 * @Date 2020/3/12 14:10
 * @Version 1.0
public class ReadXls implements ReadStrategy{
    @Override
    public List<List<Object>> readFileAppointLine(String filePathName, Integer line) throws Exception {
        if(line == null){
            line = 51;
        // 读取xls、csv文件
        ExcelReader reader = ExcelUtil.getReader(filePathName);
        // 获取文件中所有内容
        List<List<Object>> readAll = reader.read();
        // 返回所有数据
        if(line == 0){
            return readAll;
        // 封装指定条数内容
        List<List<Object>> subList = readAll.subList(0, (line + 1));
        /*// 打印
        for (List li : subList) {
            Console.log(li);
        return subList;
package com.chuangqi.tool.readFile;
import java.util.List;
 * @Description 读取csv文件
 * @Author qizhentao
 * @Date 2020/3/12 14:12
 * @Version 1.0
public class ReadCsv implements ReadStrategy{
    @Override
    public List<List<Object>> readFileAppointLine(String filePathName, Integer line) throws Exception {
        ReadXls readXls = new ReadXls();
        return readXls.readFileAppointLine(filePathName, line);
package com.chuangqi.tool.readFile;
import cn.hutool.core.lang.Console;
import java.util.List;
 * @Description 读取文件-策略封装
 * @Author qizhentao
 * @Date 2020/3/12 14:31
 * @Version 1.0
public class ReadStrategyContent {
    private ReadStrategy readStrategy;
    public ReadStrategyContent(){
    public ReadStrategyContent(ReadStrategy readStrategy){
        this.readStrategy = readStrategy;
     * 通过无参构造读取txt、dat、csv、xls文件内容
     * @param filePathName 文件全路径
     * @param line 读取行数,0表示读取全部内容
     * @return
    public List<List<Object>> getReadFile(String filePathName, Integer line){
        if (filePathName.endsWith(".txt") || filePathName.endsWith(".TXT")){
            readStrategy = new ReadTxt();
        }else if(filePathName.endsWith(".dat") || filePathName.endsWith(".DAT")){
            readStrategy = new ReadDat();
        }else if(filePathName.endsWith(".csv") || filePathName.endsWith(".CSV")){
            readStrategy = new ReadCsv();
        }else if(filePathName.endsWith(".xls") || filePathName.endsWith(".xlsx") || filePathName.endsWith(".XLS") || filePathName.endsWith(".XLSX")){
            readStrategy = new ReadXls();
        return getStructureReadFile(filePathName, line);
     * 通过有构造执行对应的方法
     * @param filePathName 读取文件全路径
     * @param line 读取行数,0表示读取全部内容
     * @return
    public List<List<Object>> getStructureReadFile(String filePathName, Integer line){
        if (readStrategy == null){
            Console.log("ReadStrategy不能为空");
        try {
            return readStrategy.readFileAppointLine(filePathName, line);
        } catch (Exception e) {
            e.printStackTrace();
        return null;
    // 测试
    public static final String DAT =  "C:\\Users\\cq\\Desktop\\Data1随机数30.DAT";
    public static final String TXT = "C:\\Users\\cq\\Desktop\\Data1_Step_PZ.txt";
    public static final String CSV = "C:\\Users\\cq\\Desktop\\csv测试.csv";
    public static final String XLS = "C:\\Users\\cq\\Desktop\\xls测试.xls";
    public static void main(String[] args) {
        // 无参构造读取
        long l = System.currentTimeMillis();
        ReadStrategyContent readStrategyContent = new ReadStrategyContent();
        List<List<Object>> readFile = readStrategyContent.getReadFile(TXT, 100000);
        System.out.println(System.currentTimeMillis() - l);
        // 文件行数   解析加载耗时(毫秒)
        // 10000            130
        // 100000           360
        // 1000000          3500
        for (List li:readFile) {
            Console.log(li);
        Console.log("读取行数:{}",readFile.size());
        /*// 有参构造读取
        ReadStrategyContent readStrategyContent = new ReadStrategyContent(new ReadTxt());
        List<List<Object>> readFile = readStrategyContent.getReadFile("C:\\Users\\cq\\Desktop\\项目参考文档\\BS仿真评估\\gitLab\\测试导入文件\\Data1_Step_PZ.txt", 50);
        for (List li:readFile) {
            Console.log(li);
                    解析xls、csv文件所需要的pom&lt;!-- 工具包 --&gt;        &lt;dependency&gt;            &lt;groupId&gt;cn.hutool&lt;/groupId&gt;            &lt;artifactId&gt;hutool-all&lt;/artifactId&gt;            &lt;vers...
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
以下是java代码,直接可用,不用手动计算异或值
此处的jdk版本需要1.8以上…,另外两个参数(解析文件路径和输出路径)需要改成自己的哦~
此处的原理是判断图片文件的十六进制特征码。
第一种:weChatImgRevert.java
package com;
				
在实际工作中, 我们需要读取一些报表之的数据文件, 这些文件一般可以是.dat .txt 格式的 , 那么如何读取呢? 下面案例以 .txt 为例.  package wxy.IO; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOExc
1、 写一段程序,让其运行时的表现为触发了5次Young GC、3次Full GC、然后3次Young GC; 2、 如果一个Java进程突然消失了,你会怎么去排查这种问题? 3、 给了一段Spring加载Bean的代码片段,阐述一下具体的执行流程? 是不是看上去很难,是不是和自己准备的“题库”中的问题不一样?不知道从何处下手?如果你有这种感觉,那么说明你的技术还需要继续修炼。 面对如此多的技术面试,怎么样才能说自己的技术已经过关了呢? String wxPath="C:\Users\Administrator\Documents\WeChat Files"; //保存路径(输出) String savePath="C:\Users\Administrator\Desktop"; //开始解析 convert(wxPath, savePath); * @param path 图片目录地址 * @param targetPath 转换后目录 但是还有一个场景不知道有没有考虑过? 因为大多数业务下,秒杀抢购时,其实还有一个支付业务。 在秒杀抢购成功后,库存表库存-1,但是用户需要在三分钟内支付,如果超时的话算作库存失败,这个时候应该库存要+1了。 像是这种场景,是否是说需要用延迟队列来实现?那思路又是什么?以下思路是否可以实现呢?例如当用户抢购成功后,MQ消费者的消费方法会在库存中-1,同时把用户的手机号和商品id作为标记,放置到延迟队列(设置过期三分钟)。此时,如果用户前端调用了支付方法,那么就从延迟队列中删除该消息。而延迟队列会在三分钟后消费,如果某个用户没在3分钟内支付,那么该消息就会在满3分钟时被延迟队列的方法执行,最后库存又+1. 【Seata】分布式事务框架原理解析 花哥码天下: 亲测OK, 按照步骤搭建配置能实现分布式事务回滚