我有一个读取固定长度文件的方法。我正在尝试为用户提供适当的验证。所以,在我下面的代码中包含的方法。
if (currentLine.length() != 257) {
ViewClass view = new ViewClass();
ViewClass.invalidFile();
}
View类中的方法invalidFile()如下所示。
public void invalidFile(){
JOptionPane.showMessageDialog(this.rootPane, "Invalid File Selected");
}
我有三个要上传的文件。一旦用户选择了所有文件并点击生成输出,就会启动读取文件的过程。所以,我的问题是当用户上传无效文件时,会向用户显示一条消息,但一旦用户点击“确定”,就会读取下一个文件。下面是单击“生成输出”时调用的方法。
private void jGenerateOutputBtnActionPerformed(java.awt.event.ActionEvent evt) {
Thread execThread = new Thread() {
public void run() {
readFirstFile();
readSecondFile();
readThirdFile();
}
}
};
execThread.start();
我的目标是阻止程序进一步执行。我在invalidFile()中包含了System.exit(0),但随后关闭了窗口。我想保持窗口打开但停止执行,直到用户选择有效文件。
PS:请告诉我这是否已经被问到或者这里不应该问什么。我没有发现任何重复。感谢您的帮助。
答案 0 :(得分:0)
使readFirstFile,readSecondFile和readThirdFile在出现任何问题时抛出异常,并在try / catch块中包含对这些方法的调用。只要这些函数中的任何一个抛出异常,就不会调用以下函数
答案 1 :(得分:0)
如果你让invalidFile()
抛出异常,你可以按照规定的方式处理它。
public void invalidFile() throws IOException {
JOptionPane.showMessageDialog(this.rootPane, "Invalid File Selected");
throw new IOException("Invalid file");
}
private void readFirstFile() throws IOException {
// ...
invalidFile();
}
private void jGenerateOutputBtnActionPerformed(java.awt.event.ActionEvent evt) {
Thread execThread = new Thread() {
public void run() {
try {
readFirstFile();
readSecondFile();
readThirdFile();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
答案 2 :(得分:0)
下面的示例代码将打开JFileChooser
,它将仅列出具有特定文件大小的文件。 [注意:根据public boolean accept(File f)
FileFilter
文件内容的实现情况,可以验证文件的内容,但对于大文件,它会对性能产生影响。]
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;
class FileSizeFilter extends FileFilter {
int size;
String description;
public FileSizeFilter(int size, String description) {
this.size = size;
this.description = description;
}
public FileSizeFilter() {
super();
// TODO Auto-generated constructor stub
}
@Override
public boolean accept(File f) {
if (f.isFile()) {
long l = f.length();
// check on size basis
// or
// read the file line by line and check the length of line
if (l == size) {
return true;
}
}
return false;
}
@Override
public String getDescription() {
return description;
}
}
/**
*/
public class Demo {
public static void main(String[] args) {
final JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setLayout(new FlowLayout());
JButton button = new JButton("Select Files");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setFileFilter(new FileSizeFilter(257, "File Size Limiter"));
fileChooser.setMultiSelectionEnabled(true);
fileChooser.showOpenDialog(frame);
File[] selectedFiles = fileChooser.getSelectedFiles();
if (selectedFiles != null) {
for (File file : selectedFiles) {
System.out.println(file.getAbsolutePath() + " : " + file.length());
}
}
}
});
frame.add(button);
}
}