чтение и запись массива Strings и переменных enum в файл произвольного доступа и обратно - PullRequest
0 голосов
/ 21 ноября 2011

Я хотел бы использовать файл произвольного доступа для хранения информации для моей программы. Есть ли способ, которым я могу читать и записывать массив строк и переменных перечисления в и из файла. (Мне известно, что я мог бы сделать это, используя интерфейс Serializable для чтения и записи в двоичный файл и из него, но я ищу решение для файла с произвольным доступом.)

см. Код:

public Book(RandomAccessFile file) throws IOException {
        // set up Item based on data stored in data disk file
       try {
        this.ISBN=file.readLong();
        this.title = readCharacters(file, 30);
        this.publicationDate.set(file.readInt(), file.readInt(), file.readInt());// year month date
        this.publisher = readCharacters(file, 30);
        this.authorNames= //insert method to read in arraylist of Strings           
this.salePrice=file.readDouble();
        this.bookCategory=//insert method to read in enum       
 } catch (IOException io) {
        throw io;
    }
}
private String readCharacters (RandomAccessFile dataFile,int numChars)
  throws IOException{
      //reads a specific number of characters and places text in String field
    char[] data = new char[numChars];
    String field;
    try{
        for (int i=0;i<numChars;i++)
              data[i]= dataFile.readChar();
        //now place data into the field
        field = new String (data);
        field = field.trim(); //get rid of trailing spaces
    }
    catch(IOException io){
        throw io;
    }
    return field;
}

public void writeToFile(String fileName,long location)throws Exception{
    try{
    RandomAccessFile invFile = 
        new RandomAccessFile(fileName,"rw");
    //seek to correct record in file          
       invFile.seek(location);
    //now write out the  record
     //write out the data in fixed length fields
       //String fields must be truncated if too large
       //or padded with blanks if too small
       invFile.writeLong(ISBN);
       writeCharacters(invFile,title,30);
       invFile.writeInt(publicationDate.YEAR);
       invFile.writeInt(publicationDate.MONTH);
       invFile.writeInt(publicationDate.DAY_OF_MONTH);
       writeCharacters(invFile,publisher,30);
     //insert method to write arraylist of authorNames that are Strings        
invFile.writeDouble(salePrice);
     //insert method to write out bookCategory which is an enumerated type          
 invFile.close();
    }
private void writeCharacters(RandomAccessFile invFile,
        String data, int numChars)throws IOException{
    char[] stringValue;
    String dataChars;
    try{
        //assume data has the complete number of characters
        dataChars = data.substring(0,numChars); 
        invFile.writeChars(dataChars);
    }
    catch(IndexOutOfBoundsException e){
        //data has less number of characters, must be padded with blanks
        dataChars = data.substring(0,data.length());
        invFile.writeChars(dataChars);
        //now add extra blanks
        for (int i=0; i<numChars-dataChars.length();i++)
            invFile.writeChar(' ');         
    }
    catch(IOException io){
        throw io;
    } 

}

1 Ответ

0 голосов
/ 21 ноября 2011

Вы не читаете и не пишете это каким-либо особым образом.Это то же самое, что и любой другой поток:

File f = new File("outputfile");
RandomAccessFile raf = new RandomAccessFile(f, "rw");

char ch = raf.readChar(); // establish the connection
raf.seek(f.length()); // go to the end of the file
raf.writeUTF("some string"); // write something
raf.close(); // close it.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...