0

.exeファイルがあります。ファイルを入力として受け取り、ファイルを出力として.txt返します。.txt

と の 2 つのフォルダ名がInputFilesありExeFolderます。

InputFilesフォルダーには非常に多くの入力ファイルがあり、これらのファイルは引数として.Exefile に渡されます。

ExeFolder.exeファイル、outputファイル、および1つのファイルのみがありInputます(このファイルはInputFilesフォルダーから取得します)。

1 つの Web アプリケーションを構築したいのですが、次のように動作します。

ステップ1 :

通常、ファイルを検索するたびに sourceDirectory で利用できるファイルの数をチェックし.txtますが、コードのメンテナンスfiletypeのために関数に引数として渡しました。

このために、次のコードを書きましたが、正常に動作しています

 public List<File> ListOfFileNames(String directoryPath,String fileType)
{
    //Creating Object for File class
    File fileObject=new File(directoryPath);
    //Fetching all the FileNames under given Path
    File[] listOfFiles=fileObject.listFiles();
    //Creating another Array for saving fileNames, which are satisfying as far our requirements
    List<File> fileNames = new ArrayList<File>();
    for (int fileIndex = 0; fileIndex < listOfFiles.length; fileIndex++) 
    {
        if (listOfFiles[fileIndex].isFile())
        {
          //True condition,Array Index value is File
          if (listOfFiles[fileIndex].getName().endsWith(fileType)) 
          {
              //System.out.println(listOfFiles[fileIndex].getName());
              fileNames .add(listOfFiles[fileIndex]);
          }
        }  
    }
    return fileNames;
}

ステップ2:

ループを使用forしました 長さに基づいてListOfFileNames[dir,filetype]、反復ごとにフォルダーfileに上書きされExeFolderます。このために、次の関数を作成しました。正常に動作しています

  public void FileMoving(File sourceFilePath,String destinationPath,String fileName)throws IOException 
 {
File destinationPathObject=new File(destinationPath);
if (
        (destinationPathObject.isDirectory())&&
        (sourceFilePath.isFile())
    )
    //both source and destination paths are available 
    {
        //creating object for File class
        File statusFileNameObject=new File(destinationPath+"/"+fileName);
        if (statusFileNameObject.isFile())
            //Already file is exists in Destination path
            {
                //deleted File
                statusFileNameObject.delete();
                //paste file from source to Destination path with fileName as value of fileName argument
                FileUtils.copyFile(sourceFilePath, statusFileNameObject);
            }
            //File is not exists in Destination path.
            {
                //paste file from source to Destination path with fileName as value of fileName argument
                FileUtils.copyFile(sourceFilePath, statusFileNameObject);
            }
    }
}

ステップ 3 :

.exeファイルが実行されます。このために、次の関数を作成しました。正常に動作しますが、この関数では待機用のコードを追加する必要があります。

   public void ExeternalFileProcessing(String DirectoryPath,String exeFilePath,String inputFileName) throws IOException
  {
//Creating Absolute file path of the executableFile
String executableFileName = DirectoryPath+"/"+exeFilePath;
//Assinging the InputFileName argument value to inputFile Variable
String inputFile=inputFileName;
//creating ProcessBuilderObject with 2 arguments
ProcessBuilder processBuilderObject=new ProcessBuilder(executableFileName,inputFile);
//creating object
File absoluteDirectory = new File(DirectoryPath);
//Assinging 
processBuilderObject.directory(absoluteDirectory);
//starting process
processBuilderObject.start();
//
//processBuilderObject.wait();
 }

ステップ 4:

プロセスが完了.exeすると、次のイテレーションのみが開始されます。つまり.exe、プロセスが完了しているかどうかを監視する必要があります。

統合のために、次の関数名を として書きましたIntegration

  public void Integration(String fileType,String sourcePath,String directoryPath,String executableName,String inputFileName)throws IOException
  {
    //created object for Class
    ExternalFileExecutions ExternalFileExecutionsObject=new ExternalFileExecutions();
    //calling Method from class object
    List<File> finalListNames=ExternalFileExecutionsObject.ListOfFileNames(sourcePath,fileType);
    for (int fileIndex = 0; fileIndex < finalListNames.size(); fileIndex++) 
    {
        //Copy and pasting file from SourcePath to destination Path
        ExternalFileExecutionsObject.FileMoving(
                                                    finalListNames.get(fileIndex),
                                                    directoryPath,
                                                    inputFileName
                                                );
        //Form here,.exe process will be start
        ExternalFileExecutionsObject.ExeternalFileProcessing(directoryPath,executableName,inputFileName);
    }
 }

私はこれらを呼び出し、次のようにIntegration機能しmain()ます。

public static void main(String[] args) throws IOException
{
//created object for Class
ExternalFileExecutions ExternalFileExecutionsObject=new ExternalFileExecutions();
ExternalFileExecutionsObject.Integration(
                                            ".txt",
                                            "C:/Users/Infratab Bangalore/Desktop/copy",
                                            "C:/Users/Infratab Bangalore/Desktop/Rods",
                                            "ThMapInfratab1-2.exe",
                                            "TMapInput.txt"
                                        );
 }

あなたがオブザーバー、私のコードなら、.exeそれが完了したかどうかにかかわらず、監視を除いてすべてのことが行われました。最初の反復プロセスが完了すると、次の反復が許可され.exeますqueue

実際に私は取り組んだことはありませんが、上記の関数Javaを使用しstackoverflowて書きました。.exe次に、監視を修正したいと思います。

何も見つかりませんでした。

誰でも私を助けることができます。

私が直面していることを皆さんが理解してくれることを願っています。

ありがとう

4

2 に答える 2