2016-11-05 60 views
0

我爲我的uni作業寫了這個程序。主要思想是,當addItem被調用時,它會創建一個文本文件並在該文件上向用戶寫入順序。但是它怎麼會只創建文件,卻在內部沒有打印任何內容。我想創建一個名稱來自用戶和文字的文本文件?

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.io.Writer; 


public class OrderedFood extends Food { 

private int quantity; 
private boolean isSet; 
private SetDrink setDrink; 


public OrderedFood(){ 
    quantity = 0; 
    isSet = false; 
    setDrink = null; 
} 

public OrderedFood(String foodCode, String foodName,boolean isSet, SetDrink setDrink, int quantity){ 
    super(foodCode, foodName); 
    this.isSet = isSet; 
    this.quantity = quantity; 
    this.setDrink = setDrink; 
} 

public int getquantity(){ 
    return quantity; 
} 

public void setquantity(int quantity){ 
    this.quantity = quantity; 
} 

public boolean getIsSet(){ 
    return isSet; 
} 
public void setisSet(boolean isSet){ 
    this.isSet = isSet; 
} 
public SetDrink getsetDrink(){ 
    return setDrink; 
} 
public void setsetDrink(SetDrink setDrink){ 
    this.setDrink = setDrink; 
} 

public void addItem (String foodCode, int TabNum)throws IOException{ 
    clearScreen(); // invoking the clearScreen method 


    String filename = Integer.toString(TabNum); 
    try 
    { 
     //this blocks creates a table by the table num 
     File file = new File("/tmp", filename);  
     System.out.println("path=" + file.getAbsolutePath()); 
     file.createNewFile(); 

     System.out.println("File created"); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println("Failed to create file"); 
    } 
    try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "utf-8"))) 
    { 
     writer.write("foodCode"); // this syntax prints the order 
     writer.close(); 
    } 

} 
public void deleteItem(String foodCode , int TabNum)throws IOException{ 
    clearScreen(); 

    String Tab = Integer.toString(TabNum); 

    remove(Tab,foodCode);// we just invoke the remove method, which will then remove the item from the .txt file 
} 


public static void clearScreen() { // this method clears the screen. 
    System.out.print("\033[H\033[2J"); 
    System.out.flush(); 
    } 


public void remove(String file, String lineToRemove)throws IOException { 

     try { 

      File inFile = new File(file); 

      if (!inFile.isFile()) { 
       System.out.println("Parameter is not an existing file"); 
       return; 
      } 

      File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); 

      BufferedReader buff = new BufferedReader(new FileReader(file)); 
      PrintWriter kap = new PrintWriter(new FileWriter(tempFile)); 

      String line = null; 


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

       if (!line.trim().equals(lineToRemove)) { 

        kap.println(line); 
        kap.flush(); 
       } 
      } 
      kap.close(); 
      buff.close(); 

      if (!inFile.delete()) { 
       System.out.println("Could not delete file"); 
       return; 
      } 

      if (!tempFile.renameTo(inFile)) 
       System.out.println("Could not rename file"); 

     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     } 

    } 
+0

此代碼僅使用'file.createNewFile()'創建一個新文件。可能應該添加將數據寫入文件的代碼。 – kgeorgiy

+0

是的,但文件的名稱來自用戶,所以當我嘗試使用通用代碼寫入文件時,它要求文件的名稱 'PrintWriter writer = new PrintWriter(「the-file-name.txt」 ,「UTF-8」); writer.println(「第一行」);' –

+0

有'PrintWriter' [構造函數](http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#PrintWriter -java.io.File-java.lang.String-)接受'File'。 – kgeorgiy

回答

0

還有就是當你創建一個文件打開文件寫你使用的文件名時,你說的不是擴展也是一個邏輯錯誤,但它包含的只是tabnumber不是文件中使用下面的代碼的完整路徑

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.io.Writer; 


public class OrderedFood extends Food { 

private int quantity; 
private boolean isSet; 
private SetDrink setDrink; 


public OrderedFood(){ 
    quantity = 0; 
    isSet = false; 
    setDrink = null; 
} 

public OrderedFood(String foodCode, String foodName,boolean isSet, SetDrink setDrink, int quantity){ 
    super(foodCode, foodName); 
    this.isSet = isSet; 
    this.quantity = quantity; 
    this.setDrink = setDrink; 
} 

public int getquantity(){ 
    return quantity; 
} 

public void setquantity(int quantity){ 
    this.quantity = quantity; 
} 

public boolean getIsSet(){ 
    return isSet; 
} 
public void setisSet(boolean isSet){ 
    this.isSet = isSet; 
} 
public SetDrink getsetDrink(){ 
    return setDrink; 
} 
public void setsetDrink(SetDrink setDrink){ 
    this.setDrink = setDrink; 
} 

public void addItem (String foodCode, int TabNum)throws IOException{ 
    clearScreen(); // invoking the clearScreen method 


    String filename = Integer.toString(TabNum); 
    try 
    { 
     //this blocks creates a table by the table num 
     File file = new File("/tmp", filename);  
     System.out.println("path=" + file.getAbsolutePath()); 
     file.createNewFile(); 
     filename = file.getAbsolutePath(); //here the actual address is updated to use later 

     System.out.println("File created"); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println("Failed to create file"); 
    } 
    try 
    { 
     //now here we need that address updated earlier not just the tabnumber 
     PrintWriter writer = new PrintWriter(filename, "UTF-8"); 
     writer.print("food code"); 
     riter.close(); 
    } 

} 
public void deleteItem(String foodCode , int TabNum)throws IOException{ 
    clearScreen(); 

    String Tab = Integer.toString(TabNum); 

    remove(Tab,foodCode);// we just invoke the remove method, which will then remove the item from the .txt file 
} 


public static void clearScreen() { // this method clears the screen. 
    System.out.print("\033[H\033[2J"); 
    System.out.flush(); 
    } 


public void remove(String file, String lineToRemove)throws IOException { 

     try { 

      File inFile = new File(file); 

      if (!inFile.isFile()) { 
       System.out.println("Parameter is not an existing file"); 
       return; 
      } 

      File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); 

      BufferedReader buff = new BufferedReader(new FileReader(file)); 
      PrintWriter kap = new PrintWriter(new FileWriter(tempFile)); 

      String line = null; 


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

       if (!line.trim().equals(lineToRemove)) { 

        kap.println(line); 
        kap.flush(); 
       } 
      } 
      kap.close(); 
      buff.close(); 

      if (!inFile.delete()) { 
       System.out.println("Could not delete file"); 
       return; 
      } 

      if (!tempFile.renameTo(inFile)) 
       System.out.println("Could not rename file"); 

     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     } 

    } 
+0

謝謝,現在工作 –

+0

然後標記爲解決方案,如果工作和upvote too –

+0

文件擴展名是不必要的 –

相關問題