for (int i = 0; i < arr.length; i++) {
if (arr[i] == -128) {
arr[i] = ' ';
} else if (arr[i] > -128 && arr[i] < 0) {
i++;
}
}
package com.tadu.utils.ftp;之后现在文件中有繁体了 又解析不了了 直接显示成?
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.dom4j.DocumentException;
import com.tadu.vo.mobile.Books;
/**
* @author 陈亮 读取文件内容 按照文件读取内容 采用按行读取 每一行为一条记录 每一行记录采用特殊字符€ 特殊字符分隔 如果无数据也要进行分隔
*
*/
public class FtpCmsReader {
//文件字节流
private FileInputStream reader = null;
//当前指针
private int pointer;
// 保存字节,便于转换为字符串
private ByteBuffer bf = ByteBuffer.allocate(1024);
// 读取到的字节数
private int len;
// 单个字节
private byte b;
/**
* 指定文件名的构造函数
*
* @param filename
* @throws FileNotFoundException
*/
public FtpCmsReader(FileInputStream reader) {
this.reader = reader;
}
/**
* 读取一行数据
*
* @return 数据分割好的数组
* @throws IOException
* @throws IOException
* @throws DocumentException
*/
public <T> List<T> readLine(Class c) throws IOException, DocumentException {
List<T> resultList = new ArrayList<T>();//构造泛型集合
List<String> attrList = new ArrayList<String>();//获得每一行的属性集合 通过反射成对象 默认为字符串
String fileName = c.getSimpleName();// 获得实体的名称 创建规则 根据实体的名称 创建对应xml book.java -- book.xml
List<Map<String, String>> beanAttrList = FileFtpUtil.parseXml(fileName + ".xml");
byte [] bs = new byte[reader.available()];//直接构造文件大小字节数的字节数组
reader.read(bs);//读入数据到bs数组中
int len = bs.length;
int pointer = 0;
while(pointer<len){
b = bs[pointer++];
System.out.println(b);
if(b == -128){//当是特殊字符的时候 那么根据缓存区 构造字符串对象
attrList.add(StringUtils.trim(new String(bf.array(), 0, bf.position(),"GBK")));
System.out.println(new String(bf.array(), 0, bf.position(),"GBK"));
bf.clear();
}else if(b==10||pointer==len){//如果遇到换行符号 那么 降缓存区的最后一个属性加入到属性集合中 如果当前的pointer+ 和 len 相等 那么证明读取到完毕 封装最后一个实体对象
attrList.add(StringUtils.trim(new String(bf.array(), 0, bf.position(),"GBK")));
System.out.println(new String(bf.array(), 0, bf.position(),"GBK"));
System.out.println("______________________________________________________________");
bf.clear();//清空缓存区
//T t = FileFtpUtil.transAttrToBean(attrList, c,beanAttrList);
//resultList.add(t);
attrList.clear();//清空集合
}else{
bf.put(b);
}
}
reader.close();
return resultList;
}
public static void main(String[] args){
try {
FtpCmsReader reader = new FtpCmsReader(new FileInputStream("c:\\11.txt"));
List<Books> list = reader.readLine(Books.class);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.tadu.utils.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class FtpBookReader extends FtpCmsReader {
public FtpBookReader(File f) {
super(f);
}
@Override
public void readLine() {
List<String> attrList = new ArrayList<String>();//获得每一行的属性集合 通过反射成对象 默认为字符串
try {
FileInputStream reader = new FileInputStream(f);
byte [] bs = new byte[reader.available()];//读入全部数据
reader.read(bs);//读入数据到bs数组中
int pointer = 0 ;//定义游标
int len = bs.length; //初始化长度
int line = 1; //定义到读取到多少行
boolean flag = false;//标志是否是中文
String sqlTemplate = null; //sql
Connection con = JdbcUtil.getConnection();
con.setAutoCommit(false);
Statement statement = con.createStatement();
while(pointer<len){
b=bs[pointer++];//获得字节
m=bs[pointer];
flag=Math.isChinese(b, m);//判断是否是中文
String str = Math.bytesToHexString(b);//获得字节的16进制编码
if("80".equals(str)){
attrList.add(new String(bf.array(),0,bf.position(),"GBK"));
bf.clear();
}else if("0d".equals(Math.bytesToHexString(b))){//遇到換行符
if("0a".equals(Math.bytesToHexString(bs[pointer]))){
attrList.add(new String(bf.array(),0,bf.position(),"GBK"));
sqlTemplate = SqlUtil.sqlExtator("books.xml", SqlUtil.SQL_INSERT, attrList);
statement.addBatch(sqlTemplate);//批量更新
System.out.println(len + "----------" + pointer);
if(line%1000==0||len == pointer+1){
statement.executeBatch();
con.commit();
}
System.out.println("同步 全量文件 ------正在读取文件 " + f.getName() + "读取到行" + line +"------------" + "属性长度为" + attrList.size());
System.out.println("插入一条数据成功--------------------------------------------------------------- sql" + sqlTemplate);
bf.clear();//清空缓存区
attrList.clear();//清空集合数据
pointer++;//游标前移
line++;//记录行数增加
}else{
bf.put(b);
}
}else{
if(flag == true){ //如果是中文 双字节放入缓冲区 游标前移一位
bf.put(b);
bf.put(m);
pointer++;
}else{
bf.put(b);
}
}
}
JdbcUtil.close(statement, con);//释放连接
reader.close();//关闭流
} catch (Exception e) {
System.out.println("同步全量文件出错 出错在" + attrList.get(2).toString());
e.printStackTrace();
}
}
}
File classDir = new File(train_dir,CATEGORIES[i]); String[] trainingFiles = classDir.list(); File file = new File(classDir,trainingFiles[j]); GetHtmlText getText= new GetHtmlText(file.toURI().to...
java 文件名过滤特殊字符 /** * 过滤掉特殊字符 * * @param fileName * @return */ public static String filterSpecialChar(String fileName) { //删除所有的空格 fileName = Rege...
最近公司在做一个项目其中一个需求是读取文件中的特殊字符在其后进行添加或删除字符操作,本来想直接使用randomAccessFile按行读取,读取到特殊字符就进行添加或删除操作,但是randomAccessFile会覆盖后边的内容,...
更多Android高级架构进阶视频免费学习请点击:哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibilispace.bilibili.com个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括Java IO体系。借用几张网络图片...
首先扯点别的:真是好记性不如烂笔头啊,关于java的输入输出流真是看一遍忘一遍,每次用的时候还得查看API,也是艰难。除了知道IO可以分为输入流,输出...从一个文件总读取字符串。在Eclipse中新建一个JavaIo的工程,在
直接上代码: File file = new File("file_path"); //method 1 String str = FileUtils.readFileToString(file); System.out.println(str);...FileReader fileReader = new FileReader(file);...BufferedReader...
输入输出的重要性: ...输入和输出功能是Java对...程序从输入流读取数据,向输出流写入数据。Java是面向对象的程序语言,每一个数据流都是一个对象,它们提供了各种支持“...
split() 方法可以根据匹配给定的正则表达式来拆分字符串 public String[] split(String regex, int limit) //regex为正则表达式 //limit为切割份数 实例: String s0; try (BufferedReader br = new ...
java 读取文件的两种方式 一种是通过FileInputStream对象;一种是通过Files.readAllBytes(path)的形式 File file = new File("E:/学习规划1.docx"); if (file.exists()){ System.out.println("文件存在,大小为"+...
什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。
java读取文件到字符串Sometimes while working with files, we need to read the file to String in Java. Today we will look into various ways to read the file to String in Java. 有时在处理文件时,我们需要...
JAVA中 IO流文本文件的读取方式(read 用法) 第一种 首先,我们先用通常的read方法去读 代码 import java.io.FileReader; import java.io.IOException; public class FileReaderdemo2{ public static void main...
Java IO操作-按行读取txt文本文件 文章目录Java IO操作-按行读取txt文本文件0.前言1.将txt文本文件按照UTF-8格式存储2.按行读取代码实现3.运行效果4.字符串提取单词txt百度网盘下载(无提取码) 0.前言 同学安卓课设想...
java中文件流的两个主要方式就是字符流和字节流,如下图: 具体的使用方法可以参考官方文档,这里主要介绍四种常见的文件读取方式 1.通过字节来读取文件(常用于二进制文件:图片、声音、视频等) 2.通过字符来...
[重学Java基础][JavaIO流][Part.4]过滤字符输入输出流 [重学Java基础][JavaIO流][Part.4]过滤字符输入输出流 FilterReader 与PushbackReader 概述 官方注释 源码分析 成员变量 成员方法 代码示例 ...
IO流的分类: 1、根据流的数据对象来分: 高端流:所有的内存中的流都是高端流,比如:InputStreamReader 低端流:所有的外界设备中的流都是低端流,比如InputStream,OutputStream 如何区分:所有的流对象...
只能传输文本文件(能够被记事本打开.java/.txt/.html,并且不改变内容的文件) 只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 所以字符流顾名思义就是主要操作字符的! 四、字符流的编码...
加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b.解密过程:先读取整个加密文件,然后将加密文件写入...
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看...– ifeve.comIO概述在这一小节,我会试着给出Java IO(java.io)包下所有类的概述。更具体地说,我会根...
2019独角兽企业重金招聘Python工程师标准>>> ...
1、字符流读文件 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Unsuppo...
一、IO流,什么是IO?I :InputO:Output通过IO可以完成硬盘文件的读和写二、IO流的分类有多种分类方式:1. 按照流的方向进行分类...2. 按照读取数据方式不同进行分类(字节流、字符流):按照字节的方式读取数据,一...
当我们要将Java程序中产生的数据永久性地保存起来的时候,应该想到的是将数据存到文件当中。将数据存入文件和将数据从文件中取出就涉及到了I/O的输入输出技术。Java提供了I/O操作可以将数据保存到多种类型的文件当中...
文章目录文件IO——转换流字符转字节构造方法字节转字符构造方法 Java转换流为我们提供的两种编码集(支持中文) GBK 中文2个字节 utf-8 中文3个字节 转换流原理: 字节流来操作文件, 转换流(即字符流)操作...
利用jvaa读取文本文件
复制文件中的地址可以是图片或视频。 1.基础版: package com.uwo9.test01; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream;...
java io教程Java provides several classes in java.io package to work with text, stream data, and file system. I have provided several examples on Java Files and Java IO recently. This post is an index ...
本文将详细介绍字节流和字符流,剖析它们之间的本质区别,以及区别和对比。
当如这里最重要的就是导入包:import java.io.;import java.util.;**文件的读取:** 使用Scanner读取文件 /* 相信大家都知道Scanner console=new Scanner(System.in)是用来读取控制台上输入的内容,但是这里是用来...
java中定义了许多类来进行数据的输入和输出 ,这些类都在java.io包中 1.File类 file类有许多功能,能够创建、删除、重命名、等等很多操作 具体有哪些方法 不需要死记,在用到的时候去查API手册 file类的构造方法是 ...