精华内容
下载资源
问答
  • Java RandomAccessFile 指定位置实现文件读取与写入RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件指定位置的读取和写入内容,这在很多时候都是很方便的。...

    Java RandomAccessFile 指定位置实现文件读取与写入

    RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的。

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

    RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

    基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

    只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

    实例代码:

    import java.io.IOException;

    import java.io.RandomAccessFile;

    /**

    * RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,就是说可以指定位置

    * 的读取和写入内容

    * @author andy

    *

    */

    public class RandomAccessFileTest {

    public static void main(String args[]) throws IOException {

    write();

    read();

    }

    public static void write() throws IOException {

    //以读写的方式来访问该文件

    RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "rw");

    raf.writeBytes("Hello World!");

    raf.writeBoolean(true);

    raf.writeInt(30);

    raf.writeDouble(3.56);

    raf.close();

    }

    public static void read() throws IOException {

    RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "r");

    raf.seek(12);//设置指针的位置

    boolean booleanValue = raf.readBoolean();

    int intValue = raf.readInt();

    double doubleValue = raf.readDouble();

    raf.seek(0);//设置指针的位置为文件的开始部分

    byte[] bytes = new byte[12];

    for (int i=0; i

    bytes[i] = raf.readByte();//每次读一个字节,并把它赋值给字节bytes[i]

    String stringValue = new String(bytes);

    raf.skipBytes(1);//指针跳过一个字节

    int intValue2 = raf.readInt();

    raf.close();

    System.out.println(booleanValue);

    System.out.println(intValue);

    System.out.println(doubleValue);

    System.out.println(stringValue);

    System.out.println(intValue2);

    }

    }

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • } } 【回答】 该问题看起来就是修改csv文件指定行列的内容,做起来并不难,只是Java写起来会很繁琐,用SPL就简单的多: A 1 =file("d:\\source.csv").import@c() 2 =A1.modify(2,null:#3) 3 =file("d:\\source....

    【问题】

    tl;dr: I want to output my HashMap in the same CSV file format that I am reading it in.

    I want to preface this with: I may be going about this the wrong way. Because I started this thinking one thing and didn’t account for this problem I’m having. So I’m trying to make a small application that will give you a random movie to watch depending on what genre you are in the mood for (similarly to Netflix’s Max application, but considerably dumbed down). I have a list of movies that I’m going to format myself in CSV format, because I recently wrote some code that reads in values from a CSV file and I didn’t have much to alter.

    Here is the dilemma: I have read in the CSV formatted file (only a two line sample file), since I know what columns contain what I use a BufferedReader to read in line by line storing each value of the delimited value in its own ArrayList (I know there is a better way but this is what I came up with for now) I then store each ArrayList according to genre into a HashMap. Now I want to be able to write back out to the same file at some point to edit it. So movies that have been watched will be removed from the HashMap and then overwrite the file, so that when it’s read back in next time the movie that was already watched will not be in the file anymore. So the difficulty I am having at this point is formatting the output back out to account for empty spaces in the actual CSV.

    So for example, the test file I have only contains two lines where each movie genre has two movies except for drama and comedy. So the file looks like this

    Action,Drama,Sci-fi/Fantasy,Thriller/Suspense,Comedy Action2,,Sci-fi/Fantasy2,Thriller/Suspense2,

    Just to solidify what output I want/expected; Say I watch Sci-fi/Fantasy2, it was a good movie, but it's gotta go, the output I want once removed is this

    Action,Drama,Sci-fi/Fantasy,Thriller/Suspense,Comedy Action2,,,Thriller/Suspense2,

    But I know I'm not going to get those results because when I simply read the file then output it back out I get:

    Action,Action2, Drama,, Thriller/Suspense,Thriller/Suspense2, Comedy,, Sci-fi/Fantasy,Sci-fi/Fantasy2,

    So after getting these results I now realize I didn't plan well enough, and wonder if I'm going about this the wrong way. Does anyone know how to format in the way I described? I tried to find a solution, but after coming up empty handed I deduced that maybe the format I want goes against how a CSV should look, considering some cells in the file would have to be blank. I tried keeping any blank spaces from the file so they would go into the hashmap, but results were the same. I thought about bypassing the output file altogether, but I'm not sure how to save the values I originally read in that go into my map. Any ideas or solutions would greatly appreciated. Here is the class that does all the work:

    package rngesus;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileNotFoundException;

    import java.io.FileReader;

    import java.io.FileWriter;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.HashMap;

    public class ReadWrite {

    private static final String[] GENRES = { "Action", "Drama",

    "Sci-Fi/Fantasy", "Thriller/Suspense", "Comedy" };

    private static final String NEW_LINE = "\n";

    private static final String DELIMITER = ",";

    private static final int NUM_OF_COL = 5;

    private static final int GENRE_1 = 0;

    private static final int GENRE_2 = 1;

    private static final int GENRE_3 = 2;

    private static final int GENRE_4 = 3;

    private static final int GENRE_5 = 4;

    private static String moviesFile;

    private HashMap> moviesByGenre;

    ArrayList actionMovies;

    ArrayList dramaMovies;

    ArrayList sciFiFantasyMovies;

    ArrayList thrillerSuspenseMovies;

    ArrayList comedyMovies;

    public ReadWrite() {

    moviesFile = "";

    moviesByGenre = new HashMap>();

    actionMovies = new ArrayList();

    dramaMovies = new ArrayList();

    sciFiFantasyMovies = new ArrayList();

    thrillerSuspenseMovies = new ArrayList();

    comedyMovies = new ArrayList();

    }

    public void readAndSortInputFile(String fileOfMovies) throws IOException {

    try {

    BufferedReader buffRdr = new BufferedReader(new FileReader(

    new File(fileOfMovies)));

    String line = "";

    while ((line = buffRdr.readLine()) != null) {

    String[] lnPtr = line.split(",", NUM_OF_COL);

    int diff = Math.min(lnPtr.length, NUM_OF_COL);

    for (int i = 0; i < diff; i++) {

    if ((i == GENRE_1) && !lnPtr[i].isEmpty()) {

    actionMovies.add(lnPtr[i]);

    } else if ((i == GENRE_2) && !lnPtr[i].isEmpty()) {

    dramaMovies.add(lnPtr[i]);

    } else if ((i == GENRE_3) && !lnPtr[i].isEmpty()) {

    sciFiFantasyMovies.add(lnPtr[i]);

    } else if ((i == GENRE_4) && !lnPtr[i].isEmpty()) {

    thrillerSuspenseMovies.add(lnPtr[i]);

    } else if ((i == GENRE_5) && !lnPtr[i].isEmpty()){

    comedyMovies.add(lnPtr[i]);

    }

    }

    【回答】

    该问题看起来就是修改csv文件中指定行列的内容,做起来并不难,只是Java写起来会很繁琐,用SPL就简单的多:

    A

    1

    =file("d:\\source.csv").import@c()

    2

    =A1.modify(2,null:#3)

    3

    =file("d:\\source.csv").export@c(A1)

    A1:读取source.csv中的内容。

    d649637a0fd29b541ba9709738702eb1.png

    A2:将第2行的第3列数据改成null。

    749b844fd5f0f6084df3cbe921cafcb9.png

    A3:将修改后的A1的结果再写入source.csv文件。

    这段代码可以方便地集成进Java(可参考)。

    展开全文
  • java RandomAccessFile 指定位置实现文件读取与写入RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件指定位置的读取和写入内容,这在很多时候都是很方便的。...

    java RandomAccessFile 指定位置实现文件读取与写入

    RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的。

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

    RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

    基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节eHDrYXy数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

    只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

    实例代码:

    import java.io.IOException;

    import java.io.RandomAccessFile;

    /**

    * Randhttp://www.cppcns.comomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,就是说可以指定位置

    * 的读取和写入内容

    * @author andy

    *

    */

    public class RandomAccessFileTest {

    public static void main(String args[]) throws IOException {

    write();

    read();

    }

    public static void write() throws IOException {

    //以读写的方式来访问该文件

    RandomAccessFile raf = new RaeHDrYXyndomAccessFile("D:\\test.txt", "rw");

    raf.writeBytes("Hello World!");

    raf.writeBoolean(true)eHDrYXy;

    raf.writeInt(30);

    raf.writeDouble(3.56);

    raf.close();

    }

    public static void read() throws IOException {

    RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "r");

    raf.seek(12);//设置指针的位置

    boolean booleanValue = raf.readBoolean();

    int intValue = raf.readInt();

    double doubleValue = raf.readDouble();

    raf.seek(0);//设置指针的位置为文件eHDrYXy的开始部分

    byte[] bytes = new byte[12];

    for (int i=0; i

    bytes[i] = raf.readByte();//每次读一个字节,并把它赋值给字节bytes[i]

    String stringValue = new String(bytes);

    raf.skipBytes(1);//指针跳过一个字节

    int intValue2 = raf.readInt();

    raf.close();

    System.out.println(booleanValue);

    System.out.println(intValue);

    System.out.println(doubleValue);

    System.out.println(stringValue);

    System.out.println(intValue2);

    }

    }

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    本文标题: Java RandomAccessFile 指定位置实现文件读取与写入

    本文地址: http://www.cppcns.com/ruanjian/java/175580.html

    展开全文
  • Java RandomAccessFile 指定位置实现文件读取与写入RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件指定位置的读取和写入内容,这在很多时候都是很方便的。...

    Java RandomAccessFile 指定位置实现文件读取与写入

    RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的。

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

    RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

    基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

    只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

    实例代码:

    import java.io.IOException;

    import java.io.RandomAccessFile;

    /**

    * RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,就是说可以指定位置

    * 的读取和写入内容

    * @author andy

    *

    */

    public class RandomAccessFileTest {

    public static void main(String args[]) throws IOException {

    write();

    read();

    }

    public static void write() throws IOException {

    //以读写的方式来访问该文件

    RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "rw");

    raf.writeBytes("Hello World!");

    raf.writeBoolean(true);

    raf.writeInt(30);

    raf.writeDouble(3.56);

    raf.close();

    }

    public static void read() throws IOException {

    RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "r");

    raf.seek(12);//设置指针的位置

    boolean booleanValue = raf.readBoolean();

    int intValue = raf.readInt();

    double doubleValue = raf.readDouble();

    raf.seek(0);//设置指针的位置为文件的开始部分

    byte[] bytes = new byte[12];

    for (int i=0; i

    bytes[i] = raf.readByte();//每次读一个字节,并把它赋值给字节bytes[i]

    String stringValue = new String(bytes);

    raf.skipBytes(1);//指针跳过一个字节

    int intValue2 = raf.readInt();

    raf.close();

    System.out.println(booleanValue);

    System.out.println(intValue);

    System.out.println(doubleValue);

    System.out.println(stringValue);

    System.out.println(intValue2);

    }

    }

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • Java RandomAccessFile 指定位置实现文件读取与写入RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件指定位置的读取和写入内容,这在很多时候都是很方便的。...
  • 现在需要将汇总数据写入文件第一行,然后将若干行(假设10w行)明细数据从第二行一直到100001行。 实现方式: 方法一: (1)查询数据库:在数据库sql中做统计得到汇总行数据,写入文件中。 (2)查询数据库:...
  • Java的BufferedWriter类用于将字符流写入指定的目的地(字符输出流)。它最初将所有字符存储在缓冲区中,并将缓冲区的内容推到目标位置,从而高效地写入字符,数组和字符串。您可以在实例化此类时指定所需的缓冲区大小...
  • )方法的原理能够使用字节流完成文件的复制能够使用FileWirter写数据文件能够说出FileWriter中关闭和刷新方法的区别能够使用FileWriter写数据的5个方法能够使用FileWriter写数据...
  • RandomAccessFile:随机读取文件流 可以读 写文件任意位置数据 通过构造器创建对象 RandomAccessFile accessFile = new RandomAccessFile(fileName, "rw"); mode有四种模式 了解后看代码 import org....
  • RandomAccessFile是Java提供的对文件内容的访问,她既可以读文件,也可以写文件,并且RandomAccessFile支持随机访问文件,也就是说他可以指定位置进行访问。 我们知道Java文件模型,文件硬盘上的文件是bytebyte...
  • JavajavaIO之用随机流读写文件

    千次阅读 2016-02-06 15:20:44
    //用随机流读写文件的优点:建立的流既能读也能,并且能在指定位置读写数据 //这个例子是把几个int型数据写入tom.dat文件,然后反序输出 public class RandomAccessFile { public static void main(String[] args...
  • RandomAccessFile的使用 1.RandomAccessFile直接继承于java.lang.Object类,实现了...3.如果RandomAccessFile作为输出流时,出到的文件如果不存在,则在执行过程中自动创建。 如果出到的文件存在,则会对...
  • 一、BufferedInputStream / BufferedOutputStream 缓冲字节流1、概念 Java 缓冲流本身并不具有 IO 流的读取与写入... 当对文件或者其他数据源进行频繁的读写操作时,效率比较低,这时如果使用缓冲流就能够更高效的...
  • 在IO包中,提供了一个RandomAccesseFile类,它不属于流类,但具有读写文件数据的功能,可以随机从文件的任何位置开始并以指定的操作权限(如只读、可读写等)执行读写数据的操作。 RandomAccesseFile类构造方法: ...
  • 同行整理,简单明了,快速上手!=============================正文1============================最近和Excel频繁亲密接触,...好在这N个Excel表结构还比较一致,可以程序在指定位置读取,然后再写入到新的Exce...
  • 竞争编程中,大多数时候我们需要输入输出手动检查我们...对于输入/输出,我们基本上使用这两种类型的文件访问模式,即“ r”:表示已读,因为它打开文件进行输入操作,但文件必须存在于指定位置。“ w”:表示操作...
  • 1 概述java.io.RandomAccessFileRandomAccessFile 用于在文件的任意位置读写数据,并且不会消耗太多的内存。RandomAccessFile 虽然属于 java.io 下的类,但它不是 InputStream 或者 OutputStream 的子类;它也不同于...
  • 硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并...
  • 学习目标 ...之前的File类只是针对文件本身进行操作的,而如果要想对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机读取一个文件指定位置数据,例如,现在假设...
  • java读写 功能

    2017-07-17 14:32:00
    /*//创建FileWriter对象,调用window资源,在指定位置创建好了数据存放的目的地。 //如果指定目录下,已存在要创建的文件,那么会被覆盖。 FileWriter fw = new FileWriter("demo.txt");...
  • 前言: 关于File类 File类是用来表示本地文件的,所以创建对象时需要指定本地文件位置(通过File对象的有参构造...File文件字节输入流的读(相对于来说,读取数据有更多的注意事项) 指定文件:a.txt 输入流
  • javaIO RandomAccessFile类随机读写

    千次阅读 2018-05-03 22:46:31
    File类只是针对文件本身进行操作的,而如果要想对文件内容进行操作,则可以使用RandomAccessFile类,RandomAccessFile属于随机读取类,可以随机读取一个文件指定位置数据1. 构造方法RandomAccessFile(File file,...
  • Java实时读取日志文件

    千次阅读 2016-11-25 09:32:43
    在一台服务器上写日志文件,每当日志文件写到一定大小时,比如是1G,会将这个日志文件改名成另一个名字,并新建一个与原文件名相同的日志文件,再往这个新建的日志文件写数据;要求写一个程序能实时地读取日志文件...
  • 在一台服务器上写日志文件,每当日志文件写到一定大小时,比如是1G,会将这个日志文件改名成另一个名字,并新建一个与原文件名相同的日志文件,再往这个新建的日志文件写数据;要求写一个程序能实时地读取日志文件...
  • 然后通过流的子类来指定位置;接着进行输入或输出操作;最后关闭“输入/输出”即可。流是用来读写传输数据的,输入和输出是对程序本身而言的,但程序需要读入数据用读入流,程序需要将数据输出保存起来用输出流。流...
  • Java中IO操作是有相应步骤的,以文件操作为例,主要的操作流程如下:使用File类打开一个文件;通过字节流或字符流的子类指定输出的位置;进行读/操作关闭输入/输出字节流和字符流区别:读写单位:顾名思义,字节...
  • 然后通过流的子类来指定位置;接着进行输入或输出操作;最后关闭“输入/输出”即可。流是用来读写传输数据的,输入和输出是对程序本身而言的,但程序需要读入数据用读入流,程序需要将数据输出保存起来用输出流。流...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 291
精华内容 116
关键字:

java文件指定位置写数据

java 订阅