【Java文件】按UTF-8编码读取文本文件(逐行方式),排序,打印到控制台
代码:
package findJavaMemberFunction; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 查找一个Java源文件中的成员函数名 * */ public class FindFunctionNames { public static void main(String[] args) { try { // (\\s+):group(2) 匹配一个或多个空格 // (\\S+):group(3) 匹配返回值如void,String // (\\s+):group(4) 匹配一个或多个空格 // ([_a-zA-Z]+[_a-zA-Z0-9]*):group(5) 匹配函数名 // ([(]([^()]*)[)]):group(1) 匹配函数的参数 java.util.regex.Pattern pattern=Pattern.compile("(\\s+)(public|protected|private|static)(\\s+)(\\S+)(\\s+)([_a-zA-Z]+[_a-zA-Z0-9]*)([(]([^()]*)[)])"); List<String> list=new ArrayList<String>(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\logs\\Json.java"), "UTF-8")); String line = null; int lineIndex=0; while( ( line = br.readLine() ) != null ) { lineIndex++; Matcher matcher=pattern.matcher(line); while(matcher.find()) { System.out.println("Line " + lineIndex +":" + matcher.group(6)+ matcher.group(7)); } list.add(line); } br.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
输出:
Line 58:getValueList() Line 62:addJsonToList(Json json) Line 71:addJsonToArray(Json json) Line 79:adjustDepth() Line 97:toString() Line 152:compareTo(Json other) Line 156:getIndentSpace() Line 160:getKey() Line 164:setKey(String key) Line 168:getParent() Line 172:setParent(Json parent) Line 176:main(String[] args)
测试文件:
package com.hy; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * Json对象类 * @author 逆火 * * 2019年12月2日 下午8:17:06 */ public class Json implements Comparable<Json>{ // There are value types public static final int Type_String=1; public static final int Type_Array=2; public static final int Type_List=3; // Key always is String private String key; private Json parent; // There are three types of value private int valueType; private String valueString; private List<Json> valueList; // indent depth private int depth; public Json() { } /** * Contructor1 */ public Json(String key,String value) { this.key=key; this.valueType=Type_String; this.valueString=value; this.depth=0; } public Json(String key,int type) { this.key=key; if(type==Type_List) { this.valueType=Type_List; this.valueList=new LinkedList<Json>(); }else if(type==Type_Array) { this.valueType=Type_Array; this.valueList=new LinkedList<Json>(); } } public List<Json> getValueList() { return valueList; } public void addJsonToList(Json json) { if(valueList!=null) { valueList.add(json); json.parent=this; adjustDepth(); } } public void addJsonToArray(Json json) { if(valueList!=null) { valueList.add(json); json.parent=this; adjustDepth(); } } private void adjustDepth() { if(valueType==Type_List) { for(Json json:valueList) { json.depth=this.depth+1; json.adjustDepth(); } } if(valueType==Type_Array) { for(Json json:valueList) { json.depth=this.depth+1; json.adjustDepth(); } } } public String toString() { StringBuilder sb=new StringBuilder(); // key String tabs=getIndentSpace(); sb.append(tabs); //sb.append("\""+(key==null?"":key)+"\""); if(key!=null) { //sb.append("\""+key+"\"");// 以对象构建时恢复 sb.append(key);// 以文件构建时打开 sb.append(":"); }else { } // value if(valueType==Type_String) { //sb.append("\""+valueString+"\"");// 以对象构建时恢复 sb.append(valueString);// 以文件构建时打开 }else if(valueType==Type_Array) { sb.append("[\n"); int n=valueList.size(); for(int i=0;i<n;i++) { Json json=valueList.get(i); if(i!=n-1) { sb.append(json.toString()+",\n"); }else { sb.append(json.toString()+"\n"); } } sb.append(tabs+"]"); }else if(valueType==Type_List) { sb.append("{\n"); Collections.sort(valueList); int n=valueList.size(); for(int i=0;i<n;i++) { Json json=valueList.get(i); if(i!=n-1) { sb.append(json.toString()+",\n"); }else { sb.append(json.toString()+"\n"); } } sb.append(tabs+"}"); } return sb.toString(); } public int compareTo(Json other) { return this.key.compareTo(other.key); } private String getIndentSpace() { return String.join("", Collections.nCopies(this.depth, " ")); } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Json getParent() { return parent; } public void setParent(Json parent) { this.parent = parent; } public static void main(String[] args) { Json id1=new Json("id","001"); Json name1=new Json("name","鐧借彍"); Json title=new Json("title",3); title.addJsonToList(id1); title.addJsonToList(name1); Json empty1=new Json(null,3); empty1.addJsonToList(new Json("id","001")); empty1.addJsonToList(new Json("id","浣犲ソ鐧借彍")); Json empty2=new Json(null,3); empty2.addJsonToList(new Json("id","001")); empty2.addJsonToList(new Json("id","浣犲ソ钀濆崪")); Json content=new Json("content",2); content.addJsonToArray(empty1); content.addJsonToArray(empty2); Json data=new Json("data",3); data.addJsonToList(title); data.addJsonToList(content); Json status=new Json("status","0000"); Json message=new Json("message","success"); Json root=new Json(null,3); root.addJsonToList(status); root.addJsonToList(message); root.addJsonToList(data); System.out.println(root.toString()); } }
--END-- 2019年11月30日17:42:48
【Java文件】按UTF-8编码读取文本文件(逐行方式),排序,打印到控制台的更多相关文章
- jdk编译java文件时出现:编码GBK的不可映射字符
出现此问题的几种解决办法: 1.cmd下使用javac编译java文件 如: javac test.java 解决办法:编译时加上encoding选项 javac -encoding UTF-8 te ...
- Java文件读写操作指定编码方式防乱码
读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...
- Java文件读写操作指定编码方式。。。。。
读: File file=new File(this.filePath);BufferedReader br=new BufferedReader(new InputStreamReader(new ...
- 读取文本文件中的中文打印到Eclipse控制台为何显示问号
原因:未将文本文件存为utf-8编码格式而是ascii编码格式.
- JAVA支持字符编码读取文件
文件操作,在java中很常用,对于存在特定编码的文件,则需要根据字符编码进行读取,要不容易出现乱码 /** * 读取文件 * @param filePath 文件路径 */ public static ...
- myeclipse下java文件乱码问题解决
中文乱码是因为编码格式不一致导致的.1.进入Eclipse,导入一个项目工程,如果项目文件的编码与你的工具编码不一致,将会造成乱码.2.如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文 ...
- linux下sort命令使用详解---linux将文本文件内容加以排序命令
转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...
- 自动判断文本文件编码来读取文本文件内容(.net版本和java版本)
.net版本 using System; using System.IO; using System.Text; namespace G2.Common { /// <summary> / ...
- (转) Java读取文本文件中文乱码问题
http://blog.csdn.net/greenqingqingws/article/details/7395213 最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中 ...
随机推荐
- PyCharm-安装&调试
windows安装pycharm 和python的链接: PyCharm:http://www.jetbrains.com/pycharm/ Python:https://www.python.org ...
- c++第五次作业
运算符重载 一.运算符重载基本规则 1.运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为. 2.一般来讲,重载的功能应当与原有功能相似,不能改变原运算符的操作 ...
- 大量javascript代码的项目如何改善可维护性
项目中有点javascript文件,javascript代码行数达到7000多行,维护很费力,主要体现在以下几个方面: 1,方法没有注释,没有注释方法的作用,从上到下罗列,很难知道这个方法应该啥时候调 ...
- android在主线程下载文件
android在主线程下载文件 加入以下代码即可if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy polic ...
- oracle添加序列
原文地址 http://blog.itpub.net/24099965/viewspace-1116923/ 1.创建.删除 create sequence seq_newsId increment ...
- SQL进阶系列之0窗口函数
窗口函数 What's 窗口函数? 窗口函数也称为OLAP(OnLine Analytical Processing)函数,目前MySQL还不支持. 窗口函数的语法 <窗口函数> OVER ...
- Django之路——6 Django的模型层(一)
ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- Alpha冲刺随笔六:第六天
课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(十天冲刺) 团队名称:葫芦娃队 作业目标:在十天冲刺里对每天的任务进行总结. 随笔汇总:https://www.cnblogs ...
- 【测试工具】moco入门(一)
转自:https://www.cnblogs.com/tangqiu/p/9493147.html 简单来说,Moco就是解决了开发前端时没有后端支持,开发接口时依赖没有到位的尴尬场景.当然Moco的 ...
- Vue 实例成员
Vue 一. 什么是Vue 可以独立完成前后端分离时 Web项目的JavaScript框架 二.为什么学Vue 前端三大主流框架:Angular React Vue Vue结合了其他框架优点.轻量级. ...