diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java index 5677881798..eb2a653486 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/archive/RestoreDialog.java @@ -394,9 +394,9 @@ public class RestoreDialog extends ReusableDialogComponentProvider { jarFileChooser.setTitle("Restore a Ghidra Project - Archive"); String lastDirSelected = Preferences.getProperty(ArchivePlugin.LAST_ARCHIVE_DIR); if (lastDirSelected != null) { - File file = new File(lastDirSelected); - if (file.exists()) { - jarFileChooser.setCurrentDirectory(file); + File dir = new File(lastDirSelected); + if (dir.isDirectory()) { + jarFileChooser.setCurrentDirectory(dir); } } File jarFile = null; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ExportToHeaderAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ExportToHeaderAction.java index fd345dcac5..8ef362a79b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ExportToHeaderAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ExportToHeaderAction.java @@ -261,9 +261,9 @@ public class ExportToHeaderAction extends DockingAction { String lastDirSelected = Preferences.getProperty(LAST_DATA_TYPE_EXPORT_DIRECTORY); if (lastDirSelected != null) { - File file = new File(lastDirSelected); - if (file.exists()) { - fileChooser.setCurrentDirectory(file); + File dir = new File(lastDirSelected); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); } } diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java index a1b6456f8a..974c00f855 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java @@ -94,7 +94,10 @@ public class ExportPatternFileActionListener implements ActionListener { gFileChooser.setFileFilter(xmlFilter); String baseDir = Preferences.getProperty(XML_EXPORT_DIR_PROPERTY); if (baseDir != null) { - gFileChooser.setCurrentDirectory(new File(baseDir)); + File dir = new File(baseDir); + if (dir.isDirectory()) { + gFileChooser.setCurrentDirectory(dir); + } } gFileChooser.setTitle("Select Export File"); File outFile = gFileChooser.getSelectedFile(); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java index 78787b759e..32eaff816a 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/FunctionBitPatternsMainProvider.java @@ -233,7 +233,10 @@ public class FunctionBitPatternsMainProvider extends ComponentProviderAdapter fileChooser.setTitle("Select Directory Containing XML Files"); String baseDir = Preferences.getProperty(PATTERN_INFO_DIR); if (baseDir != null) { - fileChooser.setCurrentDirectory(new File(baseDir)); + File dir = new File(baseDir); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); + } } File xmlDir = fileChooser.getSelectedFile(); fileChooser.dispose(); diff --git a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ImportPatternFileActionListener.java b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ImportPatternFileActionListener.java index 7de9629e5d..6b94393663 100644 --- a/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ImportPatternFileActionListener.java +++ b/Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ImportPatternFileActionListener.java @@ -64,7 +64,10 @@ public class ImportPatternFileActionListener implements ActionListener { fileChooser.setTitle("Select Pattern File"); String baseDir = Preferences.getProperty(XML_IMPORT_DIR_PROPERTY); if (baseDir != null) { - fileChooser.setCurrentDirectory(new File(baseDir)); + File dir = new File(baseDir); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); + } } ExtensionFileFilter xmlFilter = new ExtensionFileFilter("xml", "XML Files"); fileChooser.setFileFilter(xmlFilter); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java b/Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java index b7fff8bcf3..462f70b264 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java @@ -932,9 +932,11 @@ public class KeyBindingUtils { private static File getStartingDir() { String lastDirectoryPath = Preferences.getProperty(LAST_KEY_BINDING_EXPORT_DIRECTORY); if (lastDirectoryPath != null) { - return new File(lastDirectoryPath); + File dir = new File(lastDirectoryPath); + if (dir.isDirectory()) { + return dir; + } } - return new File(System.getProperty("user.home")); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java index 29dd4d131f..04a61e2974 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java @@ -310,9 +310,12 @@ public class PathManager { } }); } - String dir = Preferences.getProperty(preferenceForLastSelectedDir); - if (dir != null) { - fileChooser.setCurrentDirectory(new File(dir)); + String dirPath = Preferences.getProperty(preferenceForLastSelectedDir); + if (dirPath != null) { + File dir = new File(dirPath); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); + } } List files = fileChooser.getSelectedFiles(); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathnameTablePanel.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathnameTablePanel.java index 6562cf9fb8..7f88899dc1 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathnameTablePanel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathnameTablePanel.java @@ -312,9 +312,12 @@ public class PathnameTablePanel extends JPanel { } }); } - String dir = Preferences.getProperty(preferenceForLastSelectedDir); - if (dir != null) { - fileChooser.setCurrentDirectory(new File(dir)); + String dirPath = Preferences.getProperty(preferenceForLastSelectedDir); + if (dirPath != null) { + File dir = new File(dirPath); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); + } } List files = fileChooser.getSelectedFiles(); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java index 616d0ad5f9..ddc11c494a 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/SelectProjectPanel.java @@ -137,15 +137,22 @@ class SelectProjectPanel extends AbstractWizardJPanel { directoryField = new JTextField(25); directoryField.setName("Project Directory"); - String lastDirSelected = Preferences.getProperty(Preferences.LAST_NEW_PROJECT_DIRECTORY); - if (lastDirSelected != null) { - directoryField.setText(lastDirSelected); + File projectDirectory = null; + String projectDirPath = Preferences.getProperty(Preferences.LAST_NEW_PROJECT_DIRECTORY); + if (projectDirPath != null) { + // if it exists, use last directory where project was created + projectDirectory = new File(projectDirPath); + if (!projectDirectory.isDirectory()) { + projectDirectory = null; + } } - else { - File projectDirectory = new File(GenericRunInfo.getProjectsDirPath()); - directoryField.setText(projectDirectory.getAbsolutePath()); + if (projectDirectory == null) { + // otherwise, use last project directory or default + projectDirectory = new File(GenericRunInfo.getProjectsDirPath()); } - directoryField.setCaretPosition(directoryField.getText().length() - 1); + projectDirPath = projectDirectory.getAbsolutePath(); + directoryField.setText(projectDirPath); + directoryField.setCaretPosition(projectDirPath.length() - 1); JLabel projectNameLabel = new GDLabel("Project Name:", SwingConstants.RIGHT); projectNameField = new JTextField(25); projectNameField.setName("Project Name"); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolActionManager.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolActionManager.java index 6de6bfedbc..6f1a68dc81 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolActionManager.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolActionManager.java @@ -423,7 +423,10 @@ class ToolActionManager implements ToolChestChangeListener { String importDir = Preferences.getProperty(Preferences.LAST_TOOL_IMPORT_DIRECTORY); if (importDir != null) { - fileChooser.setCurrentDirectory(new File(importDir)); + File dir = new File(importDir); + if (dir.isDirectory()) { + fileChooser.setCurrentDirectory(dir); + } } fileChooser.rescanCurrentDirectory(); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectLocator.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectLocator.java index d802424fea..fc4600cf98 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectLocator.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectLocator.java @@ -125,8 +125,8 @@ public class ProjectLocator { scanIndex = 4; } checkInvalidChar("path", path, scanIndex); - if (!path.endsWith(File.separator)) { - path += File.separator; + if (!path.endsWith("/")) { + path += "/"; } return path; } diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java index b572f94bf7..8750767ce1 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/SaveToolConfigDialog.java @@ -394,7 +394,10 @@ public class SaveToolConfigDialog extends DialogComponentProvider implements Lis new ExtensionFileFilter(new String[] { "gif", "jpg", "bmp", "png" }, "Image Files")); String iconDir = Preferences.getProperty(LAST_ICON_DIRECTORY); if (iconDir != null) { - chooser.setCurrentDirectory(new File(iconDir)); + File dir = new File(iconDir); + if (dir.isDirectory()) { + chooser.setCurrentDirectory(dir); + } } File file = chooser.getSelectedFile(); chooser.dispose(); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java index 525558a0e6..9daffeda75 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java @@ -145,7 +145,10 @@ class ToolServicesImpl implements ToolServices { String exportDir = Preferences.getProperty(Preferences.LAST_TOOL_EXPORT_DIRECTORY); if (exportDir != null) { - newFileChooser.setCurrentDirectory(new File(exportDir)); + File dir = new File(exportDir); + if (dir.isDirectory()) { + newFileChooser.setCurrentDirectory(dir); + } } newFileChooser.setTitle("Export Tool"); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java index c9ee20497b..a88dec924f 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java @@ -401,7 +401,10 @@ public class SpecExtensionPanel extends JPanel { private static File getStartingDir() { String lastDirectoryPath = Preferences.getProperty(LAST_EXPORT_DIRECTORY); if (lastDirectoryPath != null) { - return new File(lastDirectoryPath); + File dir = new File(lastDirectoryPath); + if (dir.isDirectory()) { + return dir; + } } return new File(System.getProperty("user.home"));