.exe
ファイルがあります。ファイルを入力として受け取り、ファイルを出力として.txt
返します。.txt
と の 2 つのフォルダ名がInputFiles
ありExeFolder
ます。
InputFiles
フォルダーには非常に多くの入力ファイルがあり、これらのファイルは引数として.Exe
file に渡されます。
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
次に、監視を修正したいと思います。
何も見つかりませんでした。
誰でも私を助けることができます。
私が直面していることを皆さんが理解してくれることを願っています。
ありがとう