{"id":21974109,"url":"https://github.com/javaobjects/filecrud","last_synced_at":"2025-03-22T23:25:38.131Z","repository":{"id":105562407,"uuid":"594000377","full_name":"javaobjects/FileCrud","owner":"javaobjects","description":"Java文件以及文本的增删改查","archived":false,"fork":false,"pushed_at":"2024-05-17T18:14:29.000Z","size":857,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-28T03:17:16.997Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javaobjects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-27T11:05:48.000Z","updated_at":"2024-05-17T18:14:33.000Z","dependencies_parsed_at":"2023-10-16T23:21:05.323Z","dependency_job_id":"22e51ffd-3dfc-48bc-942b-78b1b135a684","html_url":"https://github.com/javaobjects/FileCrud","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2FFileCrud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2FFileCrud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2FFileCrud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2FFileCrud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javaobjects","download_url":"https://codeload.github.com/javaobjects/FileCrud/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245033733,"owners_count":20550321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T15:38:02.170Z","updated_at":"2025-03-22T23:25:38.106Z","avatar_url":"https://github.com/javaobjects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java-对文本的增删查改操作.md\r\n\r\n#### 主要实现功能\r\n\r\n##### [1. 对文本指定行的更改或在指定行后面插入数据功能](#1-对文本指定行的更改或在指定行后面插入数据功能-方法)\r\n\r\n\u003e 可以从头更改或插入 也可从尾更改或插入 数据 \r\n\r\n##### [2. 读取文本指定行数据功能](#2-读取文本指定行数据功能-方法)\r\n\r\n\u003e 实现了可以从头到尾读 也可以从尾到头读 例 传入参数5则读取第五行数据 或传入 -5则读取倒数第五行\r\n\r\n##### [3. 在文本尾部添加数据功能](#3-在文本尾部添加数据功能-方法)\r\n\r\n##### [4. 统计文本的字数功能](#4-统计文本的字数功能-方法)\r\n\r\n\u003e 实现了统计文本所有字数的功能  也可单独取里面的 汉字 的字数 或是 大小写字母 数字 其它字符的字母 也统计了 总的字节数\r\n\r\n##### 5. 文本的删除\r\n\r\n\u003e 文本的删除由于太过于简单 我懒得写 若你需要这个功能可在 第一个方法中更改关键代码即可\r\n\r\n```Java\r\nlines.remove(lineNumber)\r\n```\r\n\r\n#### 对应的方法\r\n\r\n##### [1. 对文本指定行的更改或在指定行后面插入数据功能-方法](#1-对文本指定行的更改或在指定行后面插入数据功能-测试)\r\n\r\n```Java\r\n\t/**\r\n\t * \u003cp\u003eTitle: setOrAddAppointedLineNumberDataByFiles\u003c/p\u003e  \r\n\t * \u003cp\u003e\r\n\t *    Description: 更新指定行数据 或 在指定行数据后面添加数据\r\n\t * \u003c/p\u003e  \r\n\t * \u003cp\u003eCopyright: Copyright (c) 2017\u003c/p\u003e  \r\n\t * \u003cp\u003eCompany: www.baidudu.com\u003c/p\u003e  \r\n\t * @param lineNumber\r\n\t * @param data\r\n\t * @param setOrAdd   传值set 则为 更改指定行数据 传add 则在指定行后面添加数据\r\n\t * @param pathStr\r\n\t * @throws Exception  \r\n\t * @author xianxian\r\n\t * @date 2023年1月27日  \r\n\t * @version 1.0\r\n\t */\r\n\tpublic static void setOrAddAppointedLineNumberDataByFiles(int lineNumber, String data, String setOrAdd,\r\n\t\t\tString pathStr) throws Exception {\r\n\t\tif (pathStr == null || pathStr.equals(\"\")) {\r\n\t\t\tpathStr = System.getProperty(\"user.dir\") + File.separator + \"log.log\";\r\n\t\t}\r\n\t\tPath path = Paths.get(pathStr);\r\n\t\tList\u003cString\u003e lines = Files.readAllLines(path, StandardCharsets.UTF_8);\r\n\t\t\r\n\t\t\r\n\t\tif (Math.abs(lineNumber) \u003e lines.size()) {\r\n\t\t\tthrow new Exception(\"指定行【\" + lineNumber + \"】不在文件行数范围内\");\r\n\t\t}\r\n\t\tif (lines.size() \u003c Math.abs(lineNumber)) {\r\n\t\t\tthrow new Exception(\"指定列 lineNumber： \" + lineNumber + \"大于文件本身的行数： \" + lines.size());\r\n\t\t} else {\r\n\t\t\tif (setOrAdd == null || setOrAdd.equals(\"\")) {\r\n\t\t\t\tthrow new Exception(\"请传入正确的 setOrAdd 值\");\r\n\t\t\t} else {\r\n\t\t\t\tif (setOrAdd.equals(\"set\") || setOrAdd.equals(\"add\")) {\r\n\t\t\t\t\tif (setOrAdd.equals(\"set\")) {\r\n\t\t\t\t\t\tlines.set(lineNumber \u003c 0 ? lines.size() + lineNumber : lineNumber - 1,data);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlines.add(lineNumber \u003c 0 ? lines.size() + lineNumber + 1 : lineNumber,data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tFiles.write(path, lines, StandardCharsets.UTF_8);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow new Exception(\"请传入正确的 setOrAdd 值\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n```\r\n\r\n##### [2. 读取文本指定行数据功能-方法](#2-读取文本指定行数据功能-测试)\r\n\r\n```Java\r\n\r\n\t/**\r\n\t * \u003cp\u003eTitle: readAppointedLineNumberByFileReader\u003c/p\u003e  \r\n\t * \u003cp\u003e\r\n\t *    Description: 1.根据指定行读数据 -N 为 倒数第N行\r\n\t * \u003c/p\u003e  \r\n\t * \u003cp\u003eCopyright: Copyright (c) 2017\u003c/p\u003e  \r\n\t * \u003cp\u003eCompany: www.baidudu.com\u003c/p\u003e  \r\n\t * @param lineNumber\r\n\t * @param pathStr\r\n\t * @return  \r\n\t * @author xianxian\r\n\t * @date 2023年1月27日  \r\n\t * @version 1.0\r\n\t */\r\n\tpublic static String readAppointedLineNumberByFileReader(int lineNumber, String pathStr) {\r\n\t\tString appointedLine = \"\";\r\n\t\tFileReader in = null;\r\n\t\tLineNumberReader reader = null;\r\n\r\n\t\tif (pathStr == null || pathStr.equals(\"\")) {\r\n\t\t\tpathStr = System.getProperty(\"user.dir\") + File.separator + \"log.log\";\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tin = new FileReader(pathStr);\r\n\t\t\treader = new LineNumberReader(in);\r\n\t\t\tlong totalLine = Files.lines(Paths.get(pathStr)).count();\r\n\t\t\tif (Math.abs(lineNumber) \u003e totalLine) {\r\n\t\t\t\tthrow new Exception(\"指定行【\" + lineNumber + \"】不在文件行数范围内\");\r\n\t\t\t}\r\n\r\n\t\t\tint line = 1;\r\n\t\t\treader.setLineNumber((int) (lineNumber \u003c 0 ? totalLine + lineNumber + 1 : lineNumber));\r\n\t\t\tlong i = reader.getLineNumber();\r\n\t\t\tString s = \"\";\r\n\r\n\t\t\twhile ((s = reader.readLine()) != null) {\r\n\t\t\t\tif (i == line) {\r\n\t\t\t\t\tappointedLine = s;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tline++;\r\n\t\t\t}\r\n\t\t\treturn appointedLine;\r\n\t\t} catch (FileNotFoundException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t} catch (IOException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\tcloseResource(in, reader);\r\n\t\t}\r\n\t\treturn appointedLine;\r\n\t}\r\n\r\n\t/**\r\n\t * \u003cp\u003eTitle: closeResource\u003c/p\u003e  \r\n\t * \u003cp\u003e\r\n\t *    Description: 2.关闭资源\r\n\t * \u003c/p\u003e  \r\n\t * \u003cp\u003eCopyright: Copyright (c) 2017\u003c/p\u003e  \r\n\t * \u003cp\u003eCompany: www.baidudu.com\u003c/p\u003e  \r\n\t * @param in\r\n\t * @param reader  \r\n\t * @author xianxian\r\n\t * @date 2023年1月27日  \r\n\t * @version 1.0\r\n\t */\r\n\tpublic static void closeResource(FileReader in, LineNumberReader reader) {\r\n\t\ttry {\r\n\t\t\tif (reader != null) {\r\n\t\t\t\treader.close();\r\n\t\t\t}\r\n\t\t\tif (in != null) {\r\n\t\t\t\tin.close();\r\n\t\t\t}\r\n\t\t} catch (IOException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n```\r\n\r\n##### [3. 在文本尾部添加数据功能-方法](#3-在文本尾部添加数据功能-测试)\r\n\r\n```Java\r\n\t/**\r\n\t * \u003cp\u003eTitle: appendBybufferedWriter\u003c/p\u003e  \r\n\t * \u003cp\u003e\r\n\t *    Description: \r\n\t * \u003c/p\u003e  \r\n\t * \u003cp\u003eCopyright: Copyright (c) 2017\u003c/p\u003e  \r\n\t * \u003cp\u003eCompany: www.baidudu.com\u003c/p\u003e  \r\n\t * @param msg\r\n\t * @param pathStr\r\n\t * @param onOffTime  \r\n\t * @author xianxian\r\n\t * @date 2023年1月27日  \r\n\t * @version 1.0\r\n\t */\r\n\tprivate static void appendBybufferedWriter(String msg, String pathStr, Boolean onOffTime) {\r\n\t\tif (pathStr == null || pathStr.equals(\"\")) {\r\n\t\t\tpathStr = System.getProperty(\"user.dir\") + File.separator + \"log.log\";\r\n\t\t}\r\n\t\tFile file = new File(pathStr);\r\n\t\tif (!file.exists()) {\r\n\t\t\ttry {\r\n\t\t\t\tfile.createNewFile();\r\n\t\t\t} catch (IOException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t\ttry {\r\n\t\t\t// 参数true 表示是否在原文件内容后追加 若不写或写false 则覆盖原文\r\n\t\t\tBufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(pathStr, true));\r\n\t\t\t// 内容输出到指定文件中\r\n\t\t\tif (onOffTime == null || onOffTime == false) {\r\n\t\t\t\tbufferedWriter.append(msg + \" \");\r\n\t\t\t} else {\r\n\t\t\t\tbufferedWriter.append(msg + \" \" + getFullTime());\r\n\t\t\t}\r\n\t\t\tbufferedWriter.newLine();\r\n\t\t\tbufferedWriter.flush();\r\n\t\t\tbufferedWriter.close();\r\n\r\n\t\t} catch (IOException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n```\r\n\r\n##### [4. 统计文本的字数功能-方法](#4-统计文本的字数功能-测试)\r\n\r\n```Java\r\n\t/**\r\n\t * \u003cp\u003eTitle: countNumOfWords\u003c/p\u003e  \r\n\t * \u003cp\u003e\r\n\t *    Description: 统计文本的字数 \r\n\t *    可以细分到 汉字 多少 英文（大小写）多少 数据多少 其它字符多少 全文共多少字节\r\n\t * \u003c/p\u003e  \r\n\t * \u003cp\u003eCopyright: Copyright (c) 2017\u003c/p\u003e  \r\n\t * \u003cp\u003eCompany: www.baidudu.com\u003c/p\u003e  \r\n\t * @param pathStr  \r\n\t * @author xianxian\r\n\t * @date 2023年1月27日  \r\n\t * @version 1.0\r\n\t */\r\n\tprivate static void countNumOfWords(String pathStr) {\r\n\t\ttry {// try代码块，当发生异常时会转到catch代码块中\r\n\t\t\t\t// 读取指定的文件\r\n\t\t\tif (pathStr == null || pathStr.equals(\"\")) {\r\n\t\t\t\tpathStr = System.getProperty(\"user.dir\") + File.separator + \"log.log\";\r\n\t\t\t}\r\n\t\t\t// 创建类进行文件的读取，并指定编码格式为utf-8\r\n\t\t\tInputStreamReader read = new InputStreamReader(new FileInputStream(pathStr), \"utf-8\");\r\n\t\t\tBufferedReader in = new BufferedReader(read);// 可用于读取指定文件\r\n\r\n\t\t\tString linDatastr = null;// 定义一个字符串类型变量linDatastr 用于存放一行的文本数据\r\n\t\t\tString wordStr = null;// 定义一个字符串类型变量wordStr\r\n\t\t\tint lineCount = 0, // 定义一个整型变量,用于统计行数\r\n\t\t\t\t\tcountWords = 0, // 定义整型变量，用于统计字符数\r\n\t\t\t\t\tchineseWords = 0, upperWords = 0, lowerWords = 0, numberWords = 0, otherWords = 0,\r\n\t\t\t\t\tallEnglishWords = 0, countBytes = 0;// 定义一个整型变量，用于统计字节数\r\n\t\t\twhile ((linDatastr = in.readLine()) != null) {// readLine()方法, 用于读取一行,只要读取内容不为空就一直执行\r\n\t\t\t\tlineCount++;// 每循环一次就进行一次自增，用于统计文本行数\r\n\t\t\t\tcountWords += linDatastr.length();// 用于统计总字符数\r\n\t\t\t\tbyte[] bytes = linDatastr.getBytes();// 求出该行的字节数组\r\n\t\t\t\tcountBytes += bytes.length;// 用于统计总字节数\r\n\t\t\t\tfor (int j = 0; j \u003c linDatastr.length(); j++) {// for循环的条件，当j小于该行长度时就一直循环并自增\r\n\t\t\t\t\twordStr = Character.toString(linDatastr.charAt(j));// 返回一个字符串对象\r\n\t\t\t\t\tif (wordStr.matches(\"[\\\\u4e00-\\\\u9fa5]\")) {// if语句的条件，判断是否为汉字\r\n\t\t\t\t\t\tchineseWords++;// 若为汉字则c1自增\r\n\t\t\t\t\t} else if (wordStr.matches(\"[A-Z]\")) {// if语句的条件，判断是否为大写字母\r\n\t\t\t\t\t\tupperWords++;// 若为大写字母则c2自增\r\n\t\t\t\t\t} else if (wordStr.matches(\"[a-z]\")) {// if语句的条件，判断是否为小写字母\r\n\t\t\t\t\t\tlowerWords++;// 若为小写字母则c3自增\r\n\t\t\t\t\t} else if (wordStr.matches(\"[0-9]\")) {// if语句的条件，判断是否为数字\r\n\t\t\t\t\t\tnumberWords++;// 若为数字则c4自增\r\n\t\t\t\t\t} else {// 否则可判断为其他字符\r\n\t\t\t\t\t\totherWords++;// 若为其他字符则c5自增\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tallEnglishWords = upperWords + lowerWords;// 统计总的字母数\r\n\t\t\tin.close();// 关闭流\r\n\t\t\tSystem.out.println(\"该文本共有\" + lineCount + \"行\");// 输出总的行数\r\n\t\t\tSystem.out.println(\"该文本共有\" + countWords + \"个字符\");// 输出总的字符数\r\n\t\t\tSystem.out.println(\"其中包含：\");// 输出提示信息\r\n\t\t\tSystem.out.println(chineseWords + \"个汉字\");// 输出汉字数\r\n\t\t\tSystem.out.println(allEnglishWords + \"个字母，其中\" + upperWords + \"个大写字母，\" + lowerWords + \"个小写字母\");// 输出字母数\r\n\t\t\tSystem.out.println(numberWords + \"个数字\");// 输出数字数\r\n\t\t\tSystem.out.println(otherWords + \"个其他字符\");// 输出其它字符数\r\n\t\t\tSystem.out.println(\"该文本共有\" + countBytes + \"个字节\");// 输出总的字节数\r\n\r\n\t\t} catch (IOException e) {// 当try代码块有异常时转到catch代码块\r\n\t\t\te.printStackTrace();// printStackTrace()方法是打印异常信息在程序中出错的位置及原因\r\n\t\t}\r\n\t}\r\n```\r\n\r\n#### 测试效果\r\n\r\n##### [1. 对文本指定行的更改或在指定行后面插入数据功能-测试](#1-对文本指定行的更改或在指定行后面插入数据功能)\r\n\r\n```Java\r\n\t\ttry {\r\n\t\t\tsetOrAddAppointedLineNumberDataByFiles(3, \"gfgfg\", \"set\", null);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n```\r\n![](../../../../Images/10.png)\r\n\r\n```Java\r\n\t\ttry {\r\n\t\t\tsetOrAddAppointedLineNumberDataByFiles(-3, \"gfgfg\", \"set\", null);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n```\r\n\r\n![](../../../../Images/11.png)\r\n\r\n```Java\r\n\t\ttry {\r\n\t\t\tsetOrAddAppointedLineNumberDataByFiles(-3, \"gfgfg\", \"add\", null);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n```\r\n\r\n![](../../../../Images/12.png)\r\n\r\n##### [2. 读取文本指定行数据功能-测试](#2-读取文本指定行数据功能)\r\n\r\n```Java\r\n\t\tSystem.out.println(readAppointedLineNumberByFileReader(-1,null));\r\n```\r\n![](../../../../Images/13.png)\r\n\r\n##### [3. 在文本尾部添加数据功能-测试](#3-在文件指定行添加数据功能)\r\n\r\n```Java\r\nappendBybufferedWriter(\"1. mylucky\", null,true);\r\n```\r\n![](../../../../Images/14.png)\r\n\r\n##### [4. 统计文本的字数功能-测试](#4-统计文本的字数功能)\r\n\r\n```Java\r\ncountNumOfWords(null);\r\n```\r\n![](../../../../Images/15.png)\r\n\r\n#### 项目源码地址\r\n\r\n[Gitee项目地址](https://gitee.com/JavaObjects/file-crud)\r\n\r\n[Github项目地址](https://github.com/javaobjects/FileCrud)\r\n\r\n**以上就是我关于 *Java-对文本的增删查改操作*  知识点的整理与总结的全部内容，希望对你有帮助。。。。。。。**\r\n\r\n***\r\n#### 分割线\r\n***\r\n\r\n#### 扩展知识\r\n\r\n***\r\n\r\n分割线\r\n\r\n***\r\n\r\n**博主为咯学编程：父母不同意学编程，现已断绝关系;恋人不同意学编程，现已分手;亲戚不同意学编程，现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏，金额不限。。。**\r\n\r\n![](https://upload-images.jianshu.io/upload_images/5227364-e76764b127f255ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Ffilecrud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavaobjects%2Ffilecrud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Ffilecrud/lists"}