zoukankan      html  css  js  c++  java
  • 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 + "
    ");
    			                	}
    			                	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返回负数

  • 相关阅读:
    Different AG groups have the exactly same group_id value if the group names are same and the ‘CLUSTER_TYPE = EXTERNAL/NONE’
    An example of polybase for Oracle
    use azure data studio to create external table for oracle
    Missing MSI and MSP files
    You may fail to backup log or restore log after TDE certification/key rotation.
    Password is required when adding a database to AG group if the database has a master key
    Use KTPASS instead of adden to configure mssql.keytab
    ardunio+舵机
    android webview 全屏100%显示图片
    glide 长方形图片显示圆角问题
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6972418.html
Copyright © 2011-2022 走看看