0

I'm trying to create a return object that contains a BufferReader and a BufferWriter. Here are my two classes:

test.java

package FileIO;

import java.io.*;

public  class Test{ 
    static String line = null;
    public static void Main() {
        String fileName = Input.getInput();

        Object[] ioObject = new Object[2];
        ioObject = OpenFile.openFileName(fileName,"READ");      

        BufferedReader bufferedReader = ioObject[0];  

        do{
           //line = null; 
           line =  ReadLine.getLine(bufferedReader); 
           System.out.println(line);
        } while (line != null);
   }    
}

OpenFile.java

package FileIO;

import java.io.*;

public class OpenFile {
    static Object[] ioObject = new Object[2];
    static BufferedReader bufferedReader = null;
    static BufferedWriter bufferedWriter = null;

   public static Object[] openFileName(String fileName, String type){


       if(type == "READ"){ 


         try{ 
            // FileReader reads text files 
            FileReader fileReader =  new FileReader(fileName);

            // Always wrap FileReader in BufferedReader.
            bufferedReader =  new BufferedReader(fileReader);
            ioObject[0] = bufferedReader;
            System.out.println("you lucky dog, file " + fileName + " was found"); 

         }catch(FileNotFoundException ex) {
            System.out.println("FATAL ERROR: File " + fileName + " not found"); 
            System.out.println(ex);
         } 
      }else if(type == "WRITE"){       

      }else{
         System.out.println("FATAL ERROR: type input can only be READ or WRITE");        
         System.exit(0);
      } 
      return ioObject;
   }
} 

I'm getting an error on this line in test.java:

BufferedReader bufferedReader = ioObject[0]; 

incompatible types object can not be converted to BufferedReader. I'm confused as ioObject[0] is a BufferedReader.

DCR
  • 14,737
  • 12
  • 52
  • 115

2 Answers2

2

Object is the superclass type. Once you convert the BufferedReader to an Object, you cannot convert it back without a cast.

BufferedReader bufferedReader = (BufferedReader) ioObject[0]; 

Also, you will need to catch ClassCastException

Bug Killer
  • 661
  • 7
  • 22
2

ioObject is an Object[], so the compiler can only determine that ioObject[0] is an Object (even though you know you put a BufferedReader in there.

You need to either cast it to a BufferedReader:

BufferedReader bufferedReader = (BufferedReader) ioObject[0];

Or, instead of using an Object[], create a strongly-typed class to hold the two references.

class IoObject {
  BufferedReader reader;
  BufferedWriter writer;

  // Constructor, etc.
}
VeeArr
  • 6,039
  • 3
  • 24
  • 45