2016-04-03 17 views
-1

Yüzlerce farklı yöntem denedim ve bunların hiçbiri işe yaramıyor. Verileri girdiğim bir ikili dosyadan veri alıp, bir nesneye depolanmış bir String, Int, Int, Int, Double gibi bir diziye koymayı deniyorum. Daha spesifik olarak, dizi toolArray [] toolName, toolID, toolQuality, toolNumberInStock ve toolPrice öğelerinden oluşan ToolItem nesnelerini tutar.İkili bir dosyadaki verileri bir alanda farklı dosya türlerine sahip bir diziye nasıl okurum? Java

Verileri ikili dosyaya yazabilirim, ancak bir kullanıcı programdan çıkarsa ve diziyi doldurmak için daha sonra tekrar gelmek istiyorsa onu alıp diziye koymakta zorluk çekiyorum. Daha önce girilen verilerle tekrar (ikili sıralı .dat dosyasından). Verilere koyuyorum nasıl

şudur:

try 
    {   
     FileOutputStream fout = new FileOutputStream("myfile.dat"); 
     DataOutputStream out = new DataOutputStream(fout); 

     System.out.println("Writing array into myfile"); 
     System.out.println(tools.toolArray[0].getName()); 
     System.out.println(tools.numberOfItems); 

     for(int i=0; i<=tools.numberOfItems-1; i++) 
     { 
      System.out.println("Printing " + tools.toolArray[i].getName()); 
      out.writeUTF(tools.toolArray[i].getName()); 

      System.out.println("Printing " + tools.toolArray[i].getID()); 
      out.writeInt(tools.toolArray[i].getID()); 

      System.out.println("Printing " +   tools.toolArray[i].getQuality()); 
      out.writeInt(tools.toolArray[i].getQuality()); 

      System.out.println("Printing "+tools.toolArray[i].getNumberInStock()); 
      out.writeInt(tools.toolArray[i].getNumberInStock()); 

      System.out.println("Printing " + tools.toolArray[i].getPrice()); 
      out.writeDouble(tools.toolArray[i].getPrice()); 

     } 

    System.out.println("Done"); 

    out.close(); 
    fout.close(); 
    } 
    catch (IOException ioe) 
    { 
     JOptionPane.showMessageDialog(this, ioe.toString(), "Error", JOptionPane.ERROR_MESSAGE); 
     System.exit(1); 
    } 

Ve bu verileri doğru almaz() pasajı, benim şimdiki okunur:

try{ 
     FileInputStream fin = new FileInputStream("myfile.dat"); 
     BufferedInputStream bin = new BufferedInputStream(fin); 
     DataInputStream din = new DataInputStream(bin);    

     while(true) 
     int x = 0; 
     { 

     System.out.println("Reading..."); 
      tools.toolArray[x].setName(din.readUTF()); 
      tools.toolArray[x].setID(din.readInt()); 
      tools.toolArray[x].setQuality(din.readInt()); 
      tools.toolArray[x].setNumberInStock(din.readInt()); 
      tools.toolArray[x].setPrice(din.readDouble()); 
     System.out.println(tools.toolArray[x].getName()+tools.toolArray[x].getID()+ 
     tools.toolArray[x].getQuality()+tools.toolArray[x].getNumberInStock()+tools.toolArray[x].getPrice()); 
    x++; 
     } 

    } 
    catch(EOFException eofe) 
    { 
     System.out.println("File read"); 
    } 
    catch (IOException ioe) 
    { 
     JOptionPane.showMessageDialog(this, ioe.toString(), "Error, cannot read from file", JOptionPane.ERROR_MESSAGE); 
     System.exit(1); 
    } 

Herhangi bir fikir ? Sadece verinin nasıl yapılacağına dair bir akış için: açık program> dosya aç> veriyi ayrı bir JFrame penceresinden diziye koyma> dosyayı kapat> programı kapat> programı aç, taze dizi> dosya> son kez bıraktığınız yerden veri girişi yapmaya devam et

+0

'Sorun yaşıyorum' bir sorun açıklaması değil. I/O kodunuz hızlı bir bakışta Tamam görünüyor. Döngüden önce x yi başlatmanız ve döngü sonunda eklemeniz gerekir. – EJP

+0

Evet, anladım ki, şimdi bunu hallettim, yine de düzeltmedim. Kod düzgün bir şekilde okunmaz veya diziye hala nasıl olması gerektiği gibi eklenmez. – dwarfcally

+0

Ve bu da bir sorun açıklaması değil. Tekrar deneyin. Bunu bir müşteriden sorun raporu olarak kabul eder misiniz? – EJP

cevap

0

Döngüden önce, döngü içinde x = 0'u başlatmanız ve döngünün altından artırmanız gerekir.

İlgili konular