我正在创建一个简单的文件打开/文件搜索器,我用它中的代码创建了一个java文件。我还进行了三重检查以确保我在正确的位置拥有正确的文件。
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class FileSearch {
private String fileNameToSearch;
private List<String> result = new ArrayList<String>();
public String getFileNameToSearch() {
return fileNameToSearch;
}
public void setFileNameToSearch(String fileNameToSearch) {
this.fileNameToSearch = fileNameToSearch;
}
public List<String> getResult() {
return result;
}
public static void main(String[] args) throws IOException {
FileSearch fileSearch = new FileSearch();
//try different directory and filename :)
fileSearch.searchDirectory(new File("/test/this"), "notepad.exe");
int count = fileSearch.getResult().size();
if(count ==0){
System.out.println("\nNo result found!");
} else {
System.out.println("\nFound " + count + " result!\n");
for (String matched : fileSearch.getResult()){
System.out.println(matched);
String newMatched = matched.replace("\\", "\\\\");
System.out.print(newMatched);
FileSearch.Openfiles(newMatched);
}
}
}
public void searchDirectory(File directory, String fileNameToSearch) {
setFileNameToSearch(fileNameToSearch);
if (directory.isDirectory()) {
search(directory);
} else {
System.out.println(directory.getAbsoluteFile() + " is not a directory!");
}
}
private void search(File file) {
if (file.isDirectory()) {
//do you have permission to read this directory?
if (file.canRead()) {
for (File temp : file.listFiles()) {
if (temp.isDirectory()) {
search(temp);
} else {
if (getFileNameToSearch().equals(temp.getName().toLowerCase())) {
result.add(temp.getAbsoluteFile().toString());
}
}
}
} else {
System.out.println(file.getAbsoluteFile() + "Permission Denied");
}
}
}
public static void Openfiles(String open) throws IOException {
List<String> command = new ArrayList<String>();
command.add(open);
ProcessBuilder builder = new ProcessBuilder(command);
Map<String, String> environ = builder.environment();
final Process process = builder.start();
java.io.InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
}
}
这是我在本网站上提出的第一个问题,所以如果我的代码格式不正确,我很抱歉。我把这个代码放进去,它运行完全没有任何错误,但它没有运行notepad.exe。我用文本文件尝试了它,它给了我“createProcess error = 193,%1不是一个有效的win 32应用程序”我在coderanch上读到它意味着它不是一个可执行文件所以我改变了它。我在google,yahoo和bing上搜索得非常努力。我甚至尝试了一些元数据。我已经问过每个人我知道知道java并且他们也无法解决这个问题。对不起我写的任何不好的英语。请尽快帮助我。提前谢谢。
答案 0 :(得分:0)
您可以使用此方法从使用jFileChooser
创建的指定目录中复制文件 public void Copy(){
// Create one directory
boolean dirFlag = false;
// create File object
File stockDir = new File(System.getProperty("user.dir")+"\\StockPhotosEtudiants/");
// change this to you directory as you wich
try {
if(stockDir.exists())
{System.out.println("Déja Creer");}
else {`// Creating directory`
dirFlag = stockDir.mkdir();
}
} catch (SecurityException Se) {
JOptionPane.showMessageDialog(this,"Error while creating directory in Java:'Nouveau Etud" + Se,"warning",JOptionPane.WARNING_MESSAGE);
}
inputFile = new File(fichier.getDirectory()+fichier.getFile());
//extract the name of the file that you wish copying "D:\\"
outputFile = new File(System.getProperty("user.dir")+"\\StockPhotosEtudiants/"+jTextField4.getText()+".png" );
while(outputFile.exists()){
outputFile = new File(System.getProperty("user.dir")+"\\StockPhotosEtudiants/"+jTextField4.getText()+"("+i+").png" );
i++;
}
UrlPhoto = System.getProperty("user.dir")+"\\StockPhotosEtudiants\\"+outputFile.getName();
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile), 4096);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outputFile), 4096);
int theChar;
while ((theChar = bis.read()) != -1) {
bos.write(theChar);
}
bos.close();
bis.close();
}
catch(Exception e){e.printStackTrace();}
}
答案 1 :(得分:0)
我对你的搜索方法进行了一些修改,并且它有效:
fileSearch.searchDirectory(new File("C:/Windows"), "notepad.exe");
搜索方法
private void search(File file) {
if (file != null && file.isDirectory()) {
File[] files = file.listFiles();
if (files != null) {
for (File temp : files) {
if (temp != null) search(temp);
}
}
} else if (getFileNameToSearch().equals(file.getName())) {
result.add(file.getAbsoluteFile().toString());
}
}
空检查似乎有点矫枉过正,但在我的尝试中它们是必要的。此外,在与C:\ Windows一样大的目录中,可能需要一段时间。
将notepad.exe从其目录复制到测试目录,我能够找到匹配的搜索,但无法启动可执行文件。原因是我不知道的。