Files
alipayDemo/src/sc545/pay/utils/ReadTxt.java
admin c843272f03 add
2022-11-09 16:11:16 +08:00

711 lines
20 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package sc545.pay.utils;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import javax.servlet.ServletContext;
public class ReadTxt {
public static void main(String[] args) {
}
/**
* 按行读取txt文件
*
* @param path
* 文件地址默认D:\\scbox_settings开头
* @return ArrayList 返回每行数据为一个items的集合
*/
public static ArrayList<String> readFileLine(ServletContext servletContext, String path) {
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
ArrayList<String> strarr = null;
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
strarr = new ArrayList<String>();
while ((lineTxt = bufferedReader.readLine()) != null) {
strarr.add(lineTxt);
}
read.close();
} else {
strarr = null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strarr;
}
/**
* 写入txt文档已存在就修改否则写入末尾,自动加换行 文件格式key=value换行分隔
*
* @param path
* 文件地址默认D:\\scbox_settings开头
* @param keyname
* 要修改的参数名
* @param content
* 要修改的参数值
*/
public static void writeSetting(ServletContext servletContext, String path, String keyname, String content) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
boolean isread = false;// 是否读取到该行并修改
// 将内容全部读出来,存为新的数据流
// 读到要修改的行进行修改存入,否则原样读取存入
StringBuffer buf = new StringBuffer();
while ((lineTxt = bufferedReader.readLine()) != null) {
if (lineTxt.startsWith(keyname + "=")) {
buf.append(keyname + "=" + content + "\r\n");
isread = true;
} else {
buf.append(lineTxt + "\r\n");
}
}
read.close();
if (!isread) {// 没有读取到,写入末尾
buf.append(keyname + "=" + content + "\r\n");
}
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(buf.toString());
out.flush();
out.close();
} else {// 不存在,创建写入
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(keyname + "=" + content + "\r\n");
out.flush();
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 读取txt配置返回map集合文件格式key=value换行分隔
*
* @param path
* 文件地址默认D:\\scbox_settings开头
* @return hashmap
*/
public static HashMap<String, String> readSetting(ServletContext servletContext, String path) {
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
HashMap<String, String> strarr = null;
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
strarr = new HashMap<String, String>();
while ((lineTxt = bufferedReader.readLine()) != null) {
if(lineTxt.indexOf("#")==0){
continue;
}
String[] arr = new String[2];
if (lineTxt.split("=").length >= 2) {
arr[0] = lineTxt.split("=")[0];
arr[1] = lineTxt.replace(arr[0]+"=", "");
strarr.put(arr[0], arr[1]);
}
}
read.close();
} else {
strarr = null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strarr;
}
/**
* 获取配置文件中所有设置属性(含注释)<br>
* map.get("z") 取注释<br>
* map.get("k") 取key<br>
* map.get("v") 取value<br>
*
*
* @param path
* 文件地址默认D:\\scbox_settings开头
*
* @param t 只取以此字符开头的不限制填null
* @param st 从以此字符开头的行开始读取不限制填null
* @param et 读到以此字符开头的行结束不限制填null
* @return
*/
public static ArrayList<HashMap<String, String>> getSettingAll(ServletContext servletContext, String path,String t,String st,String et) {
if(st==null||st.length()<1) st="";
if(et==null||et.length()<1) et="";
if(t==null||t.length()<1) t="";
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
ArrayList<HashMap<String, String>> list=new ArrayList<>();
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
String zs="";//注释文本
while ((lineTxt = bufferedReader.readLine()) != null) {
if((!"".equals(st))||lineTxt.indexOf(st)!=0) continue;
if((!"".equals(et))&&lineTxt.indexOf(et)==0) break;
HashMap<String, String> map = new HashMap<String, String>();
if(lineTxt.indexOf("#")==0){
zs=lineTxt;
continue;
}
String[] arr = new String[2];
if (lineTxt.split("=").length >= 2&&lineTxt.indexOf(t)==0) {
arr[0] = lineTxt.split("=")[0];
arr[1] = lineTxt.replace(arr[0]+"=", "");
map.put("z", zs);
map.put("k", arr[0]);
map.put("v", arr[1]);
list.add(map);
//把注释也加进去
zs="";
}
}
read.close();
} else {
list = null;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/**
* 读取txt配置文件的某一项设置值 文件格式key=value换行分隔
*
* @param path
* 文件地址
* @param settingName
* 设置名
* @param nullString
* 设置值为空时默认返回的内容
* @return string
*/
public static String getSetting(ServletContext servletContext, String path, String settingName,String nullString) {
HashMap<String, String> setting = ReadTxt.readSetting(servletContext,path);
String val = setting == null ? nullString : setting.get(settingName);
val = val == null ? "" : val;
return "".equals(val.trim()) ? nullString : val;
}
/**
* 获取所有设置名以[settingName]开头的数据
* */
public static ArrayList<String> getSettingW(ServletContext servletContext, String path, String settingName) {
HashMap<String, String> setting = ReadTxt.readSetting(servletContext,path);
if(setting==null||setting.size()<1) return null;
Iterator<Entry<String, String>> it = setting.entrySet().iterator();
ArrayList<String> rs=new ArrayList<>();
while (it.hasNext()) {
Entry<String, String> en=it.next();
String k = en.getKey();
String v = en.getValue();
if(k.indexOf(settingName)==0){
rs.add(k+"="+v);
}
}
return rs;
}
/**
* 删除某一项设置值 文件格式key=value换行分隔
*
* @param path
* 文件地址
* @param settingName
* 设置名
* @param nullString
* 设置值为空时默认返回的内容
* @return string
*/
public static void delSetting(ServletContext servletContext, String path, String settingName) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
// 将内容全部读出来,存为新的数据流
// 读到要修改的行进行修改存入,否则原样读取存入
StringBuffer buf = new StringBuffer();
while ((lineTxt = bufferedReader.readLine()) != null) {
if (lineTxt.startsWith(settingName + "=")) {
} else {
buf.append(lineTxt + "\r\n");
}
}
read.close();
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(buf.toString());
out.flush();
out.close();
} else {// 不存在,创建
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 删除设置名以[settingName]开头的数据
* @param servletContext
* @param path
* @param settingName
*/
public static void delSettingW(ServletContext servletContext, String path, String settingName) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
// 将内容全部读出来,存为新的数据流
// 读到要修改的行进行修改存入,否则原样读取存入
StringBuffer buf = new StringBuffer();
while ((lineTxt = bufferedReader.readLine()) != null) {
if (lineTxt.split("=")[0].indexOf(settingName)==0) {
} else {
buf.append(lineTxt + "\r\n");
}
}
read.close();
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(buf.toString());
out.flush();
out.close();
} else {// 不存在,创建
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 删除过期的所有设置值 文件格式key=value换行分隔
* <br>key为检测源
* @param servletContext
* @param path 路径
* @param d 有效天数
*/
public static void delOutDateSetting(ServletContext servletContext, String path, int d) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
// 将内容全部读出来,存为新的数据流
// 读到要修改的行进行修改存入,否则原样读取存入
StringBuffer buf = new StringBuffer();
boolean ts=false;
while ((lineTxt = bufferedReader.readLine()) != null) {
if(lineTxt.indexOf("=")>0&&lineTxt.indexOf("#")<0){
String[] ls = lineTxt.split("=");
int has = ls[0].length()-ls[0].replaceAll("-", "").length();
if(has>1){//日期时间
if(Utils.dateout(ls[0], d)){
buf.append(lineTxt + "\r\n");
}else{
ts=true;
}//过期
}else{//月份时间
buf.append(lineTxt + "\r\n");
}
}else{//注释或者不是setting
buf.append(lineTxt + "\r\n");
}
}
read.close();
if(ts){
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(buf.toString());
out.flush();
out.close();
}
} else {// 不存在,创建
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 删除过期的所有设置值 文件格式key=value换行分隔
* <br>value为检测源
* @param servletContext
* @param path 路径
* @param d 有效天数
*/
public static void delOutDateSettingValue(ServletContext servletContext, String path, int d) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
// 将内容全部读出来,存为新的数据流
// 读到要修改的行进行修改存入,否则原样读取存入
StringBuffer buf = new StringBuffer();
boolean ts=false;
while ((lineTxt = bufferedReader.readLine()) != null) {
if(lineTxt.indexOf("=")>0&&lineTxt.indexOf("#")<0){
String[] ls = lineTxt.split("=");
int has = ls[1].length()-ls[1].replaceAll("-", "").length();
if(has>1){//日期时间
if(Utils.dateout(ls[1], d)){
buf.append(lineTxt + "\r\n");
}else{
ts=true;
}//过期
}else{//月份时间
buf.append(lineTxt + "\r\n");
}
}else{//注释或者不是setting
buf.append(lineTxt + "\r\n");
}
}
read.close();
if(ts){
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write(buf.toString());
out.flush();
out.close();
}
} else {// 不存在,创建
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 删除全部内容
*
* @param path
* 文件地址
* @param nullString
* 设置值为空时默认返回的内容
* @return string
*/
public static void delAll(ServletContext servletContext, String path) {
/**************/
// 如果存在,则追加内容;如果文件不存在,则创建文件
if(path.indexOf("./")==0)
path =path.substring(1, path.length());
if (servletContext == null) {
if(path.indexOf(":") <= 0&&path.indexOf("/") <0)
path = "D:\\scbox_settings\\" + path;
} else {
path = servletContext.getRealPath(path);
}
try {
File file = new File(path);
if (file.isFile() && file.exists()) { // 判断文件是否存在
// 把新内容覆盖写入文件
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(path),
"UTF-8")));
out.write("".toString());
out.flush();
out.close();
} else {// 不存在,创建
String path2 = path.substring(0, path.replace("\\", "/").lastIndexOf("/"));
File file1 = new File(path2);
// 如果文件夹不存在则创建
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdirs();
}
File file2 = new File(path);
if (!file2.exists()) {
file2.createNewFile();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**************/
}
/**
* 将InputStream装换成某种字符编码的String
*
* @param in
* @param encoding
* @return
*/
public static String InputStreamTOString(InputStream in, String encoding) {
int BUFFER_SIZE = 4096;
String res = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] data = new byte[BUFFER_SIZE];
int count = -1;
try {
while ((count = in.read(data, 0, BUFFER_SIZE)) != -1) {
outputStream.write(data, 0, count);
}
} catch (Exception e) {
e.printStackTrace();
}
try {
res = new String(outputStream.toByteArray(), encoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}
}