java文件处理 之 读写TXT(比之c++,重置文件头,int转string)
一:c/c++ 处理文件的使用方法。详见博客 c++文件操作
二:java与c++的方便之处:
(1) java在读取文件时。能够对字符流进行处理,又一次进行编码,如 InputStreamReader reader = new InputStreamReader(new FileInputStream(file),encoding);
(2) BufferReader bufferReader = new BufferReader(file) 进行buffer处理
(3)java的很好用的一点就是。伸手就来,如 int 转 string ( 如Integer.toString(intNumber) )。字符串分隔(stringStr.split(exp); ) 。字符串又一次合成,直接加就可以。很好用;
(4)再借助于集成开发环境 IDE 缺少的依赖类,自己主动引入功能。更是如虎添翼。
三:处理TXT问文件的演示样例
package edu.tju.cs; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader; public class OriginalDevideByTime { String times[] = {"6:00:00","6:30:00","7:00:00","7:30:00","8:00:00","8:30:00","9:00:00","9:30:00","10:00:00","10:30:00",
"11:00:00","11:30:00","12:00:00","12:30:00","13:00:00","13:30:00","14:00:00","14:30:00","15:00:00","15:30:00",
"16:00:00","16:30:00","17:00:00","17:30:00","18:00:00","18:30:00","19:00:00","19:30:00","20:00:00","20:30:00",
"21:00:00","21:30:00","22:00:00","22:30:00","23:00:00","23:30:00","24:00:00"}; // 合成输出文件名称
public String getFileName(int cp){
String fileName = "D:\\tjdata_metro\\results\\";
fileName = fileName + Integer.toString(cp) + ".csv";
return fileName;
}
// 读取文件,并分隔数据
public void readTxtFile(String filePath){
try {
String encoding="GBK";
File file=new File(filePath);
int cp = 1;
if(file.isFile() && file.exists()){ //推断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read); String originalLine = null;
String newLine = null; while((originalLine = bufferedReader.readLine()) != null){
bufferedReader.mark((int)file.length()+1);// 设置文件标志位 //写入文件名称处理
if(cp >= times.length)
return;
String fileName = getFileName(cp);
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(fileName))); while((originalLine = bufferedReader.readLine()) != null){
// 字符串分隔
String tmp[] = originalLine.split(",");
// 假设符合又一次合成
if(tmp.length>3)
if(tmp[3].compareTo(times[cp-1])>=0&&tmp[3].compareTo(times[cp])<0){
newLine = tmp[0] + "," + tmp[1] + "," + tmp[2] + "," + tmp[3] + "," + tmp[4] + "," + tmp[5] + "," + tmp[6] + "," + tmp[7];
System.out.println(newLine);
writer.write(newLine + "\n");
}
else
System.out.println("Not between times");
}
// 关闭写文件
writer.close();
// 重置为文件開始位置,cp自加
bufferedReader.reset();
cp ++;
}
bufferedReader.close();
read.close();
}
else
{
System.out.println("OriginalDevideByTime……找不到指定的文件");
} } catch (Exception e) {
System.out.println("OriginalDevideByTime……读取文件内容出错");
e.printStackTrace();
}
System.out.println("OriginalDevideByTime……Devide is over!!!");
} // main 函数入口
public static void main(String argv[]){
String filePath = "D:\\tjdata_metro\\TOKEN_ENEX_201404_20W.csv";
OriginalDevideByTime devide = new OriginalDevideByTime(); devide.readTxtFile(filePath);
} }
四:学习心得:
(1)JAVA中文件指针复位到文件开头
File file = new File("temp.txt");
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(file));
reader.mark((int)file.length()+1);
// to do something
reader.reset();
注意:假设文件串的最后一个字符是中文。使用mark()中的长度设为file.length()
假设文件的最后一个字符串是英文或数字,则java.io.IOException: Mark invalid,使用mark()中的长度设为file.length()+1
mark用于标记当前位置。在读取一定数量的数据(小于readlimit的数据)后使用reset能够回到mark标记的位置。FileInputStream不支持mark/reset操作。BufferedInputStream支持此操作。
mark(readlimit)的含义是在当前位置作一个标记,制定能够又一次读取的最大字节数,也就是说你假设标记后读取的字节数大于readlimit。你就再也回不到回来的位置了;通常InputStream的read()返回-1后,说明到达文件尾,不能再读取。除非使用了mark/reset
(2)JAVA中int转String类型有三种方法
1》String.valueOf(i)
2》 Integer.toString(i)
3》 i+""
valueOf()和toString()方法能够明确,但为什么3中加上一个""引號也能够?谁有资料能够看到?
(3)stringStr.compareTo(otherstring) ,相等返回 0 ,若是stringStr大于otherstring返回正数,若是stringStr小于otherstring返回负数
java文件处理 之 读写TXT(比之c++,重置文件头,int转string)的更多相关文章
- PE文件解析器的编写(二)——PE文件头的解析
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只 ...
- java 文件按行读写
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Java文件复制与读写
函数介绍 public String readLine():每次读取文件的一行,当文件读取完毕时,返回null public int read(byte[] b):将文件内容读取到字节数组b ...
- 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...
- Android的R.java文件
1.Android资源管理简介: Android应用程序资源可以分为两大类,分别放在assets和res文件夹下.assets目录下保存的是一些原始的文件,可以以任何方式来进行组织.这些文件最终会被原 ...
- Android下HelloWorld项目的R.java文件介绍
R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public s ...
- R.java文件介绍
HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public static final ...
- 【android相关】【问题解决】R.java文件丢失
在进行android开发过程中,有时候,我们会遇到gen文件中R.java丢失的现象.重新build,或者clean工程,close并重新打开Project,但有时也没解决. 这可能是由于不小心把xm ...
- 【CTF杂项】常见文件文件头文件尾格式总结及各类文件头
文件头文件尾总结 JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9PNG (png), 文件头:89504E47 文件尾:AE 42 60 82GIF (gif), 文件头:47494 ...
随机推荐
- POJ 3281 网络流
题意: 思路: 网络流 重在建图- 建完了图 就一切都好说了 这道题 我的想法是 先把源点和所有的食品连上边 (容量为1) 再把食品和对应的奶牛连上边 (容量为1) 这个时候要拆点 因为每只奶牛只能才 ...
- 【实用篇】获取Android通讯录中联系人信息
第一步,在Main.xml布局文件中声明一个Button控件,布局文件代码如下: <LinearLayout xmlns:android="http://schemas.android ...
- 携手互联网企业10巨头设VC基金
包括小米科技.盛大集团.人人网.掌趣科技.游族网络.龙图游戏.蓝港互动.37游戏.星辉互动娱乐.博雅互动等10家知名互联网企业作为出资人(LP)的优格创投基金近日正式成立. 众所周知,伴随着移动互联网 ...
- linux 10201 ocfs RAC 安装+升级到10205
准备环境的时 ,要4个对外IP,2个对内IP 不超过2T,,一般都用OCFS 高端存储适合用ASM linux10G安装的时候,安装的机器时间要小于等于(如果是等于要严格等于)第二个机器的时间(只有l ...
- How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧
个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree ----| |----> RenderTree CSSOMtree ----| ...
- IBM将收购Linux发行商红帽公司,继续发力云计算市场
10月29日凌晨消息,IBM和Red Hat当地时间星期日联合宣布,IBM将以340亿美元收购红帽公司(Red Hat).根据两家公司发表的一份联合声明,IBM将以每股190美元的价格,以现金方式收购 ...
- 无闻go编程基础笔记
Go语言做Web编程非常方便,并且在开发效率和程序运行效率方面都非常优秀.相比于Java,其最大的优势就是简便易用,而相比于PHP,它最大的优势就是性能好. (go做web)推荐Gorilla的库,里 ...
- C# textBox控件只允许为数字和小数点并且提取出这个数字
一. textBox控件实现只允许为数字和小数点 如下图所示,在textBox控件框内输入只能是 要在textBox控件属性设置按键按下的事件触发,如下图所示: 二.源代码 textBox控件只允许为 ...
- 研究一些复杂java开源软件代码的体会(转)
原文地址:http://herman-liu76.iteye.com/blog/2349026 有时候看源代码是非常有趣的事情,象是思考游戏,象是思考棋局... 平时做J2EE项目中, ...
- ChinaVis2015 第一天会议
第二届 ChinaVis 2015 在天津举行,非常幸运发现者个会议,并在导师的带领下參与本次会议. 主要要是以可视化与可视分析为背景进行讲座,以马匡六为Speaker.袁晓如,张加万等致辞开幕式. ...