我尝试将fileChooser
中选定的Excel文件添加到目录中,然后将其显示在表格中(TableView
)。我有一些事先将文件添加到目录中,但excel文件最终会被破坏。即使我确实手动移动了文件(以便文件不会损坏),表格也无法正确显示文件名。
它看起来像这样:
(忽略第二个表格我还没有做任何事情。按Add Excel File
打开文件浏览器并只显示excel文件。第一个表从目录中获取文件并启动但是然后文件的名称不显示。只有一个突出显示可能存在某些内容。)
TableView<File> files = new TableView();
TableColumn sheets = new TableColumn();
files.getColumns().add(sheets);
files.getItems().addAll(sSheets.listFiles());
optionsWind.add(files, 0, 1);
Label tLabel = new Label("Your Templates");
optionsWind.add(tLabel, 1, 0);
TableView<File> template = new TableView();
TableColumn t = new TableColumn();
t.getColumns().add(t);
template.getItems().addAll(templates.listFiles());
optionsWind.add(template, 1, 1);
//Buttons grid
GridPane buttons = new GridPane();
buttons.setAlignment(Pos.CENTER);
buttons.setVgap(20);
//excel file
Button addFile = new Button();
addFile.setText("Add Excel File");
buttons.add(addFile, 0, 1);
addFile.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent e){
FileChooser excChs = new FileChooser();
excChs.setTitle("Open Excel File");
excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
File selectFile = excChs.showOpenDialog(secondaryStage);
//add stuff here
}});
答案 0 :(得分:0)
您可以使用此应用程序来更好地了解如何在新位置保存文件。你应该在另一个主题上问你的另一个问题。一个帖子应该只有一个问题。
一个按钮加载Excel文件。另一个按钮将加载的文件保存到您选择的位置,并使用您选择的名称。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication132 extends Application
{
byte[] fileContent;
@Override
public void start(Stage primaryStage)
{
Button btn = new Button();
btn.setText("Load file");
btn.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
try
{
FileChooser excChs = new FileChooser();
excChs.setTitle("Open Excel File");
excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
File selectFile = excChs.showOpenDialog(primaryStage);
fileContent = Files.readAllBytes(selectFile.toPath());
System.out.println("File loaded!");
}
catch (IOException ex) {
System.out.println(ex.toString());
}
}
});
Button btnSaveFile = new Button();
btnSaveFile.setText("Save loaded file");
btnSaveFile.setOnAction((event)->{
try
{
FileChooser excChs = new FileChooser();
excChs.setTitle("Save Excel File");
excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
File saveFile = excChs.showSaveDialog(primaryStage);
if(saveFile != null && fileContent.length > 0)
{
Files.write(saveFile.toPath(), fileContent);
System.out.println("File saved!");
}
}
catch (IOException ex) {
System.out.println(ex.toString());
}
});
VBox root = new VBox();
root.getChildren().addAll(btn, btnSaveFile);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}
如果您知道要将文件保存到哪个目录,则应对其进行硬编码。此示例显示了如何完成此操作。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication132 extends Application
{
byte[] fileContent;
@Override
public void start(Stage primaryStage)
{
Button btn = new Button();
btn.setText("Load file");
btn.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
try
{
FileChooser excChs = new FileChooser();
excChs.setTitle("Open Excel File");
excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
File selectFile = excChs.showOpenDialog(primaryStage);
fileContent = Files.readAllBytes(selectFile.toPath());
System.out.println("File loaded!");
String directoryToSaveFile = "TheAbsolutePathToSavingDirectory";<--Change this
File saveFile = new File(directoryToSaveFile + selectFile.getName());
if(saveFile.createNewFile())
{
if(fileContent.length > 0)
{
Files.write(saveFile.toPath(), fileContent);
System.out.println("File saved to " + saveFile.getAbsolutePath());
}
}
else
{
System.out.println("No file was created!");
}
}
catch (IOException ex) {
System.out.println(ex.toString());
}
}
});
VBox root = new VBox();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}