1. 程式人生 > >java實現對檔案的讀寫操作(按要求在檔案指定位置新增內容)

java實現對檔案的讀寫操作(按要求在檔案指定位置新增內容)

本問提到的讀檔案進行讀操作使用的是FileInputStream方法,寫操作使用的是FileOutputStream方法,將字元內容進行拼接主要使用的是str+"a"和StringBuffer方法.

下面是一個指令碼檔案

#!/bin/bash
#下面設定輸入檔案,把使用者執行pre_deal.sh命令時提供的第一個引數作為輸入檔名稱
infile=$1
#下面設定輸出檔案,把使用者執行pre_deal.sh命令時提供的第二個引數作為輸出檔名稱
outfile=$2
#注意,最後的$infile> $outfile必須跟在}’這兩個字元的後面
awk -F "," 'BEGIN{
srand();
        id=0;
        Province[0]="山東";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陝西";Province[5]="內蒙古";Province[6]="上海市";
        Province[7]="北京市";Province[8]="重慶市";Province[9]="天津市";Province[10]="福建";Province[11]="廣東";Province[12]="廣西";Province[13]="雲南"; 
        Province[14]="浙江";Province[15]="貴州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
        Province[21]="黑龍江";Province[22]="吉林";Province[23]="遼寧"; Province[24]="江蘇";Province[25]="甘肅";Province[26]="青海";Province[27]="四川";
        Province[28]="安徽"; Province[29]="寧夏";Province[30]="海南";Province[31]="香港";Province[32]="澳門";Province[33]="臺灣";
    }
    {
        id=id+1;
        value=int(rand()*34);       
        print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
    }' $infile> $outfile

該指令碼為林子雨大資料實驗中對資料警醒與處理操作的檔案,其功能為在每行的末尾加上一列資料(地區)並寫入指定檔案,下面我們用java來實現這一指令碼的功能.

主要實現程式碼:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Random;
import org.apache.commons.collections.map.StaticBucketMap;

import org.apache.commons.lang.text.StrBuilder;

public class bigdatatest {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fis=null;
        InputStreamReader isr=null;
        BufferedReader bReader=null;
        OutputStreamWriter osw=null;
        FileOutputStream fos=null;
        BufferedWriter bWriter=null;
        try {
            int rand;
            String line;
            StringBuffer stringBuffer ;
            fis=new FileInputStream("/home/hadoop/text.txt");//定義輸入檔案
            fos=new FileOutputStream("/home/hadoop/text2.txt");//定義輸出檔案
            isr=new InputStreamReader(fis);//讀取輸入檔案
            osw=new OutputStreamWriter(fos);//寫入輸入檔案
            bReader=new BufferedReader(isr);//讀取緩衝區
            bWriter=new BufferedWriter(osw);//寫入快取區
            String[] city={"重慶","上海","北京","黑龍江","四川","湖南","新疆","哈爾濱"};//定義需要加入的內容,這裡就隨便寫幾個為例了
            while((line=bReader.readLine())!=null){ //按行讀取資料
                rand=new Random().nextInt(8);    //生成隨機數
                String aString=line+"\t"+city[rand]+"\n";//將讀取的行資料和字串陣列按要求進行拼接
                //stringBuffer = new StringBuffer();//新建一個字串緩衝區
                //aString =stringBuffer.append(line+"\t").append(city[rand]).toString();
                System.out.println(aString);//輸出拼接結果
                bWriter.write(aString);//將拼結果按行寫入出入檔案中
            }
        } catch (FileNotFoundException e) {
            // TODO: handle exception
            System.out.println("找不到檔案");
        }catch (IOException e) {
            // TODO: handle exception
            System.out.println("讀取檔案失敗");
        }finally{
            try {
                bReader.close();//關閉讀取緩衝區
                isr.close();//關閉讀取檔案內容
                fis.close();//關閉讀取檔案
                bWriter.close();//關閉寫入快取區
                osw.close();//關閉寫入檔案內容
                fos.close();//關閉寫入檔案
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }
}

程式碼執行結果:


至此,我們就在文件每一行的末尾位置加入了一個地區屬性.

值得注意的是在

stringBuffer = new StringBuffer();//新建一個字串緩衝區

時,如果再迴圈內不新建一個字元緩衝區的話會出現,他講每行的內容均寫入緩衝區,最終寫入文件時會出現每行寫入的是從檔案開頭到當前段落的所有內容.

相關推薦

java實現檔案操作(要求檔案指定位置新增內容)

本問提到的讀檔案進行讀操作使用的是FileInputStream方法,寫操作使用的是FileOutputStream方法,將字元內容進行拼接主要使用的是str+"a"和StringBuffer方法.下面是一個指令碼檔案#!/bin/bash #下面設定輸入檔案,把使用者執行p

java實現Excel的操作以及複製列

import org.apache.poi.hssf.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; impor

Java實現CSV檔案操作

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

Pythoncsv檔案操作

 包括使用csv模組進行檔案讀寫,使用requests模組進行檔案傳送。 def pay_task_by_self(self): global success_writer, fail_writer, cont dir_path = os.path.dirname(_

java檔案操作java nio 之MappedByteBuffer,高效檔案/記憶體對映

原文地址:https://www.cnblogs.com/lyftest/p/6564282.html   java處理大檔案,一般用BufferedReader,BufferedInputStream這類帶緩衝的Io類,不過如果檔案超大的話,更快的方式是採用MappedByteB

Java檔案操作

                file(記憶體)----輸入流---->【程式】----輸出流---->file(記憶體)當我們讀寫文字檔案的時候,採用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是Input

【Linux】使用read、write、lseek函式實現檔案操作

本文章主要講述Linux環境下檔案的讀寫操作,使用到的函式有open、read、write、lseek。 open:用於開啟或者建立檔案。 read:從檔案中讀指定位元組的資料到記憶體中。 write:講記憶體中資料寫入到檔案中。 lseek:可以改變當前檔案偏移量。 #

[cocos2dx 3.0 (一)] 檔案操作 +FileUtils類

一直想學習下游戲程式設計,但總是沒下定決心。現在就從Cocos2dx開始學習吧,以後也要堅持寫些經驗文章,就當是給我自己的學習歷程的一個記錄吧。 我現在下的cocos2dx版本是3.0beta2的,而網上的大多數教程都是2.x的,有些地方有些小不同,所以難免碰到點磕碰。但這

VC++ 實現INI檔案操作

轉載:https://blog.csdn.net/fan380485838/article/details/73188420 在實際專案開發中,會用ini配置檔案,在此總結一下對ini讀寫操作 一:讀ini配置檔案 DWORD GetPrivateProfileString( LPCTSTR l

java中的File檔案操作

之前有好幾次碰到檔案操作方面的問題,大都因為時間太趕而沒有好好花時間去仔細的研究研究,每次都是在百度或者部落格或者論壇裡面參照著大牛們寫的步驟照搬過來,之後再次碰到又忘記了,剛好今天比較清閒,於是就在網上找了找Java常用的file檔案操作方面的資料。之後加以一番整理,現分

Java檔案操作

程式碼 package fileOperation; import java.io.BufferedReader; import java.io.BufferedWriter; import ja

java基礎之I/O流(一)------------字元流的檔案操作

一.流的概念: java的輸入輸出稱為流,流是一組有順序的集合。而流的本質則是資料傳輸 二.流的分類:                  1.根據處理的功能分為位元組流(InputStream,OutPutStrean)和字元流(Writer,Reader)  

Java檔案操作(FileInputStream、FileReader、BufferedReader)

1.位元組流和字元流選擇 位元組流:位元組流讀取的時候,讀到一個位元組就返回一個位元組; 主要用於讀取圖片,MP3,AVI視訊檔案。 字元流:字元流使用了位元組流讀到一個或多個位元組,如讀取中文時,就會一次讀取2個位元組。只要是處理純文字資料,就要優先考慮

MSP430 SD卡SPI操作(4) —— FatFs檔案系統實現(以MSP430F5438A為例)

本節介紹MSP430F5438A FatFs檔案系統的移植。 FatFs是一個通用的檔案系統模組,用於在小型嵌入式系統中實現FAT檔案系統。FatFs模組與IO是分開的,因此移植時需要實現下面幾個底層函式: DSTATUS disk_initialize (BYTE dr

轉!JAVA檔案操作

file(記憶體)—-輸入流—->【程式】—-輸出流—->file(記憶體) 當我們讀寫文字檔案的時候,採用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是InputStreamReader, 它是位元組轉

使用PythonAccess操作

microsoft win32com 更新 mov break 執行sql update 模塊 print 學習Python的過程中,我們會遇到Access的讀寫問題,這時我們可以利用win32.client模塊的COM組件訪問功能,通過ADODB操作Access的文件。

json.dump json.load與檔案操作

一.寫檔案 info={"name":"李小龍",'age':66,'love':"cat"} fp=open('testdict1.txt','w+',encoding='utf-8') fp.write(info) ls=list('1234567890') # print(ls) f

C/C++檔案操作 —— windowsAPI

轉自:http://blog.sina.com.cn/s/blog_6e7fed390100z0j1.html 基於C的檔案操作 在ANSI C中,對檔案的操作分為兩種方式,即流式檔案操作和I/O檔案操作,下面就分別介紹之。 一、流式檔案操作 這種方式的檔案操作有一個重要的結構

HDFS檔案操作 (通俗易懂)

首先來介紹兩個概念 ▪NameNode:領導級別。管 NameNode:領導級別。管理資料塊對映;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間; DataNode:員工級別。負責儲存客戶端發來的資料塊block;執行資料塊的讀寫操作。 理資料 寫詳細步驟: 1、首先

React Native檔案操作

最近公司專案要求進行定時上傳位置資訊,及埋點,因為使用的是RN開發,一開始就是想到在Android和Ios原生裡進行操作。 在原生裡面實現了定時任務,Android裡面使用的是broadcastReceive + service + timer實現了。 現在需要生成一個日誌檔案,一開始想在原生裡面進