2016-11-05 62 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

文件扩展名是不必要的 –

相关问题