【Java】file操作-删除文件中某一行中符合某一规则的

2023-05-16

效果

此处规则,删除已空格分隔的域名行,为防止因制表符等引起误删,强制插入的规则空格分隔 
同时要过滤掉# 和其他非自己插入的数据格式,避免误删

在这里插入图片描述

代码

package com.ths.arsenaldnsnginxconfig.test;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.File;

import java.io.FileWriter;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.PrintWriter;
import java.util.StringTokenizer;

public class FileUtil {
    public void removeLineFromFile(String file, String lineToRemove) {
        try {
            File inFile = new File(file);
            if (!inFile.isFile()) {
                System.out.println("Parameter is not an existing file");
                return;
            }

//Construct the new file that will later be renamed to the original filename.
            File tempFile = new File(inFile.getAbsolutePath() + ".tmp");
            BufferedReader br = new BufferedReader(new FileReader(file));
            PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

            String line = null;

//Read from the original file and write to the new

//unless content matches data to be removed.
// 考虑注解行 跳过 ,正常行 空格长度不一致正则尝试
            while ((line = br.readLine()) != null) {
                if (!findRealmName(line, lineToRemove)) {
                    pw.println(line);
                    pw.flush();
                }
            }

            pw.close();
            br.close();

//Delete the original file
            if (!inFile.delete()) {
                System.out.println("Could not delete file");
                return;
            }

//Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile))
                System.out.println("Could not rename file");

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();

        }

    }

    /**
     * 查找完全匹配的域名
     */
    private boolean findRealmName(String line, String s){
        System.out.println("当前行情况"+line);
        if (line.contains("\t")) {
            System.out.println("当前行有制表符");
        }
        if (line.contains("#") || line.trim().isEmpty() || !line.contains(" ") || line.contains("\t"))
            return false;
        String[] sArr = line.trim().replaceAll(" +", " ").split(" ");
        System.out.println("切割到的空格后字符串"+ sArr[1]);
        String realmName = sArr[1].substring(0, sArr[1].lastIndexOf('.'));
        System.out.println("匹配到的字符串" + realmName);
        if (s.equals(realmName))
            return true;
        return false;
    }




  /*  public static void main(String[] args) {
        FileUtil util = new FileUtil();

        util.removeLineFromFile("D:/about/dns/test.txt", "hub.cn");

    }
*/

    public static void main(String[] args) {
//        考虑删除此类异常情况多空格,空格数量不定
        String str = "   abc            def       ghi    mnopq      r       s ";
//        法1
//        StringTokenizer pas = new StringTokenizer(str, " ");
//        str = ""; //这里清空了str,但StringTokenizer对象中已经保留了原来字符串的内容。
//
//        while (pas.hasMoreTokens()) {
//            String s = pas.nextToken();
//            str = str + s + " ";
//        }
//        System.out.println(str.trim());
//        法2
        String s = str.trim().replaceAll(" +", " ");
        System.out.println(s);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java】file操作-删除文件中某一行中符合某一规则的 的相关文章

随机推荐

  • app = Flask(__name__) 是个什么东西

    34 34 34 第一部分 xff0c 初始化 xff1a 所有的Flask都必须创建程序实例 xff0c web服务器使用wsgi协议 xff0c 把客户端所有的请求都转发给这个程序实例 程序实例是Flask的对象 xff0c 一般情况下
  • 启动gazebo仿真环境报错[spawn_model-4] process has died

    启动gazebo仿真环境报错 spawn model 4 process has died 错误信息如下 xff1a spawn model 4 process has died pid 9871 exit code 1 cmd opt r
  • 安全文章研读:深度学习对抗攻击防御策略的一些实现

    本文整理自哈尔滨工业大学硕士论文 xff1a 深度学习对抗攻击防御策略的研究与实现 0x01 太长不看 深度学习在表现优异的同时 xff0c 还存在易受攻击的缺陷 多数防御策略只能应对特定的攻击方法 xff0c 普适性比较低 xff0c 另
  • CMakeList添加指定路径的库和头文件

    网上东一榔头西一棒槌的太多了 xff0c 而且不完整 xff0c 不适合对CMakeLists txt不了解的新手 一下两方法实测有效 一 方法一 包含ffmpeg头文件路径 这里以CMakeLists txt为参考路径 span clas
  • CMakeList增加make install

    要在CMakeList txt文件中增加make install和make clean指令 xff0c 可以在CMakeList txt文件中添加以下代码 xff1a 添加安装文件 span class token function ins
  • 使用SDF对ROS-Gazebo中模型进行编辑修改

    什么是SDF文件 SDF是一种XML格式 xff0c 能够描述机器人 静态和动态物体 照明 地形甚至物理学的各方面的信息 SDF可以精确描述机器人的各类性质 xff0c 除了传统的运动学特性之外 xff0c 还可以为机器人定义传感器 表面属
  • 前向声明和命名空间的关系

    问题描述 span class token comment a hh span span class token keyword class span span class token class name B span span clas
  • ADB常用命令大全

    ADB环境变量配置 adb exe的路径 xff1a Android SDK platform tools 常用命令 adb help 查看帮助 adb version 查看adb版本号 adb devices 查看设备 adb conne
  • 【Java】最长公共子串

    Scanner in span class token operator 61 span span class token keyword new span span class token class name Scanner span
  • 【分布式】白话理解CAP与Kafka

    文章目录 一 CAP定理的引入二 CAP原理的解释1 CAP的定义2 AP的解释3 CP的解释4 AC的解释 三 CAP原理的总结四 类比kafka 官网AC 配置AP或者CP 一 CAP定理的引入 在过去 xff0c 因为信息处理的业务量
  • 手动搭建史上最高效最便宜的全自动图床Typora+PicGo+Gitee

    文章目录 效果图下载软件创建gitee存储配置picgogitee插件后重启picgo开机自启 xff0c 图片重命名查看当前图床的服务端口 xff0c 方便接下来的配置 测试上传 效果图 下载软件 Typora 43 PicGo 创建gi
  • 优秀的 Spring Boot 语言开源项目

    优秀的 Spring Boot 语言开源项目 xff0c 涵盖了企业级系统框架 文件文档系统 秒杀系统 微服务化系统 后台管理系统等各个方面 Spring Boot 中文索引 项目名称 分布式敏捷开发系统架构 项目简介 xff1a 基于 S
  • xxl-job中cron表达式详解

    7个部分组成 秒数 分钟 小时 日期 月份 星期 年份 可为空 5 每部分范围 及 符号解释 秒 0 59 分 0 59 小时 0 23 日期 1 31 L W C 月份 1 12 或者 JAN DEC 可以用0 11 或用字符串 JAN
  • 【高效能办公】快速搭建前端Mock数据接口供后端调用

    配置安装 span class token comment 全局安装 span span class token function npm span i 64 shymean mock server g span class token c
  • 【Linux】上传下载文件命令rz、sz

    文章目录 安装上传下载对比工具 安装 要使用rz sz命令传输文件需要给服务器安装lrzsz yum y install lrzsz 上传 上传文件只需在shell终端仿真器中输入命令 rz xff0c 即可从弹出的对话框中选择本地磁盘上的
  • 【Java】程序制作Docker镜像 推荐方案

    文章目录 背景制作条件Dockerfile指令 xff1a 实践步骤使用官网提供的基础镜像作为镜像基础设定容器的正确的时间和时区容器中采用非 root 用户权限启动应用程序 DockerFile样例COPY 与 ADD 区别 举个栗子 背景
  • 【Linux】ln -sf软连接

    文章目录 功能格式命令参数 xff1a 软链接硬链接 场景情况 功能 功能是为某一个文件在另外一个位置建立一个同步的链接 当 我们需要在不同的目录 xff0c 用到相同的文件时 xff0c 我们不需要在每一个需要的目录下都放一个必须相同的文
  • 【Java】Collection遍历使用Iterable迭代器

    span class token keyword package span span class token namespace com span class token punctuation span example span clas
  • 【SpringBoot】Thymeleaf融合ajax

    文章目录 效果ajax htmlController 效果 局部刷新 不会出现表单重复提交 ajax html span class token operator lt span span class token operator span
  • 【Java】file操作-删除文件中某一行中符合某一规则的

    效果 此处规则 xff0c 删除已空格分隔的域名行 xff0c 为防止因制表符等引起误删 xff0c 强制插入的规则空格分隔 同时要过滤掉 和其他非自己插入的数据格式 xff0c 避免误删 代码 package com ths arsena