2015-06-27 2 views
2

По какой-то причине, когда я пытаюсь записать int, называемую длительностью, в файл с именем newSession, и программа завершается компиляцией, и я открываю файл, расположенный на моем рабочем столе, каждый другой файл fine (что означает, что контент, который я хотел записать в этот файл, был успешно), но newSession имеет в нем случайные буквы. Почему это и может кто-нибудь объяснить, почему длительность int не записывается в файл newSession и вместо этого случайные буквы.BufferedWriter, записывающий случайные буквы в файл (Java)

package kappa; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class Reader 
{ 
    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException 
    { 

     File dateFile = null; 
     Scanner reader = null; 

     try 
     { 
      String filePath = "/Users/john/Desktop/firstTime.txt"; 
      Scanner reader2 = null; 

      while(true) 
      { 
       FileWriter fw = new FileWriter(filePath); 
       BufferedWriter bw = new BufferedWriter(fw); 
       File firstTime = new File(filePath); 
       firstTime.createNewFile(); 
       bw.write("1"); 
       bw.close(); 
       reader2 = new Scanner(new File(filePath)); 
       break; 
      } 

      if(reader2.nextInt() == 1) 
      { 
       dateFile = new File("/Users/john/Desktop/Kunja.txt"); 
       dateFile.createNewFile(); 
       reader = new Scanner(dateFile); 
      } 

      // if file doesnt exists, then create it 
      if (dateFile.exists()) 
      { 
       FileWriter fw2 = new FileWriter(dateFile.getAbsoluteFile()); 
       BufferedWriter bw2 = new BufferedWriter(fw2); 

       dateFile.createNewFile(); 
       bw2.write("0"); 
       bw2.close(); 
       System.out.println("Done"); 

       int duration; 
       String ans = JOptionPane.showInputDialog ("Enter the amount of problems per training session (with number in minutes):");       

       while(!ans.matches("[0-9]+")) 
       { 
        ans = JOptionPane.showInputDialog ("Please re-enter the amount of problems per training session (with number in minutes):"); 
       }       

       duration = Integer.parseInt(ans); 
       System.out.println("Duration is " + duration); 

       int numSessions = (reader.nextInt() + 1); 
       System.out.println("Number of sessions is: " + numSessions); 
       String fileName = ("sessionNumber"+numSessions); 
       File newSession = new File("/Users/john/Desktop/"+fileName); 
       System.out.println(fileName); 

       if (!newSession.exists()) 
       { 
        newSession.createNewFile(); 
       }  

       FileWriter fw3 = new FileWriter(newSession.getAbsoluteFile()); 
       System.out.println("THE FILE PATH IS " + newSession.getAbsoluteFile()); 
       BufferedWriter bw3 = new BufferedWriter(fw3); 

       bw3.write(duration); 
       bw3.close(); 
      }else 
      { 
       int duration; 
       String ans = JOptionPane.showInputDialog ("Enter a number (only numbers please)");       

       while(!ans.matches("[0-9]+")) 
       { 
        ans = JOptionPane.showInputDialog ("Please re-enter a number (NOTHING ELSE!)"); 
       }       

       duration = Integer.parseInt(ans); 
       System.out.println(duration); 

       int numSessions = reader.nextInt(); 
       System.out.println("Number of sessions is: " + numSessions); 
       String fileName = ("sessionNumber"+numSessions); 
       File newSession = new File("/Users/john/Desktop/"+fileName); 
       System.out.println(fileName); 

       if (!newSession.exists()) 
       { 
        newSession.createNewFile(); 
        System.out.println("IT DOES NOT EXIST!"); 
       }  

       FileWriter fw = new FileWriter(newSession.getAbsoluteFile()); 
       BufferedWriter bw = new BufferedWriter(fw); 

       bw.write(duration); 
       bw.close(); 
      } 
     } catch (IOException e) 
     { 
      e.printStackTrace(); 
    } 
    } 
} 
+1

Вы пишете двоичный, а не 'буквы'. Читатели и писатели предназначены для текста. Вы должны использовать OutputStream или преобразовать целое число в текст перед записью. – EJP

+0

SO буферизованные авторы могут писать только текст? – Kappa

+0

Вы просите меня подтвердить то, что я только что сказал вам. Зачем? – EJP

ответ

1

BufferedWriter#write(int) принимает один символ (представленный в int). Если вы хотите написать текстовое представление целого числа, вам придется преобразовать его в String.

Короче говоря, заменить:

bw3.write(duration); 

С:

String durationString = String.valueOf(duration); 
bw3.write(durationString, 0, durationString.length()); 
Смежные вопросы