Java 要求用户输入文本文件名,该文件名为';它将被创建

Java 要求用户输入文本文件名,该文件名为';它将被创建,java,swing,user-interface,filewriter,Java,Swing,User Interface,Filewriter,我有代码在他按下“生成报告”按钮时创建一个文本文件,但它只生成一个预定义名称为“report.txt”的文本文件。我想要的功能是,当用户按下“生成报告”按钮时,一个小窗口应该要求用户输入文件名(可能使用JOptionPane?),并相应地按下Ok else if (str.equals("Generate Report")) { try { FileWriter fw = new FileWriter("D:\\Report.txt"); //instead of r

我有代码在他按下“生成报告”按钮时创建一个文本文件,但它只生成一个预定义名称为“report.txt”的文本文件。我想要的功能是,当用户按下“生成报告”按钮时,一个小窗口应该要求用户输入文件名(可能使用JOptionPane?),并相应地按下Ok

else if (str.equals("Generate Report")) {

    try {
        FileWriter fw = new FileWriter("D:\\Report.txt");  //instead of report.txt, I want to user to type in the name
        BufferedWriter buffer = new BufferedWriter(fw);
        String title="Title: "+lb1.getText();
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/YYYY HH:mm:ss");
        Date date = new Date();
        buffer.write(title);
        buffer.newLine();
        buffer.newLine();
        buffer.write("\nDate and Time of Creation: "+dateFormat.format(date));

        buffer.newLine();
        buffer.newLine();
        buffer.write("\nList of activities & their duration:"); 
        buffer.newLine();
        buffer.newLine();
        buffer.write("List of all paths with the activity names and total duration:");
        buffer.newLine();

        String txtArea = ta1.getText();
        String[] txtArray = txtArea.split("\n");

        for (int i = 0; i < txtArray.length; i++) {
            buffer.write(txtArray[i]);
            buffer.newLine();
        }

        buffer.close();
        ta1.setText("Report Generated");

        buffer.close();
    } catch (Exception e) {
        System.out.println(e);
    }
}
else if(str.equals(“生成报告”)){
试一试{
FileWriter fw=newfilewriter(“D:\\Report.txt”);//我希望用户输入名称,而不是Report.txt
BufferedWriter buffer=新的BufferedWriter(fw);
String title=“title:+lb1.getText();
DateFormat DateFormat=新的简化格式(“MM/dd/YYYY HH:MM:ss”);
日期=新日期();
缓冲区。写入(标题);
buffer.newLine();
buffer.newLine();
写入(“\n创建日期和时间:”+dateFormat.format(日期));
buffer.newLine();
buffer.newLine();
写入(“\n活动及其持续时间列表:”);
buffer.newLine();
buffer.newLine();
write(“包含活动名称和总持续时间的所有路径的列表:”);
buffer.newLine();
字符串txtArea=ta1.getText();
字符串[]txtArray=txtArea.split(“\n”);
对于(int i=0;i
作业窗格
可能是最简单的解决方案

else if(str.equals("Generate Report"))
{

        try {
            String filename = JOptionPane.showInputDialog("Please input a filename");
            FileWriter fw = new FileWriter(filename);
            ...
如果要将文件保存在特定位置并为其指定特定扩展名,可以在
FileWriter
的构造函数中指定这些扩展名

FileWriter fw = new FileWriter("D:\\" + filename +".txt")

这会向用户显示一个他想要的保存对话框。上面只有一些演示代码

package save;

import java.io.File;
import java.util.Optional;

import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class FileSave {

    public static void main(String[] args) {
        JFrame jFrame = new JFrame("someframe");
        jFrame.setVisible(true);
        Optional<File> fileLocation = new FileSave().showSaveDialog(jFrame);
        if (fileLocation.isPresent()) {
            File saveLocation = fileLocation.get();
            System.out.println(saveLocation);
            // TODO your save logic goes here.
        }

    }

    public Optional<File> showSaveDialog(JFrame frame) {

        String property = System.getProperty("user.home");
        File userHome = new File(property);
        JFileChooser chooser = new JFileChooser(userHome);
        chooser.setDialogType(JFileChooser.SAVE_DIALOG);
        chooser.setSelectedFile(new File(userHome, "Report.txt"));

        int returnVal = chooser.showSaveDialog(frame);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            return Optional.of(chooser.getSelectedFile());
        }
        return Optional.empty();
    }
}
包保存;
导入java.io.File;
导入java.util.Optional;
导入javax.swing.JFileChooser;
导入javax.swing.JFrame;
公共类文件保存{
公共静态void main(字符串[]args){
JFrame JFrame=新JFrame(“someframe”);
jFrame.setVisible(true);
可选fileLocation=newfilesave().showsavedilog(jFrame);
if(fileLocation.isPresent()){
File saveLocation=fileLocation.get();
System.out.println(保存位置);
//此处显示保存逻辑的TODO。
}
}
公共可选showSaveDialog(JFrame){
String property=System.getProperty(“user.home”);
File userHome=新文件(属性);
JFileChooser-chooser=新的JFileChooser(userHome);
setDialogType(JFileChooser.SAVE_对话框);
setSelectedFile(新文件(userHome,“Report.txt”);
int returnVal=chooser.showsavedilog(框架);
if(returnVal==JFileChooser.APPROVE_选项){
返回可选的.of(chooser.getSelectedFile());
}
返回可选的.empty();
}
}

仅在用户按下
生成报告
按钮时创建
文件编写器
。那么目标文件名应该已经设置好,并且可以在
FileWriter
的构造函数中使用。我不明白您包含的代码与这个问题有什么关系。我如何使它像最初的代码一样存储在D驱动器中?这不是一个文本文件!我怎么把它变成一个文本文件?这真是垃圾。JOptionPane不是专用于保存文件的
JFileDialog
专用于保存或打开文件,显示现有文件等@Ayaan,你的问题不清楚文件必须存储在D驱动器上(这是一种愚蠢的要求)。@Michaek,这不是我的答案。在回答之前,你应该花点时间仔细阅读所有的文本,并且要比把别人的努力说成废话更具建设性。