如何在某个目录中搜索并归档然后打开该文件?

时间:2014-02-06 23:12:13

标签: java

我正在创建一个简单的文件打开/文件搜索器,我用它中的代码创建了一个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并且他们也无法解决这个问题。对不起我写的任何不好的英语。请尽快帮助我。提前谢谢。

2 个答案:

答案 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从其目录复制到测试目录,我能够找到匹配的搜索,但无法启动可执行文件。原因是我不知道的。