Найти определенный файл в обнаруженном USB из Java
Я использую коды Java, чтобы найти файл, который заканчивается определенным расширением в обнаруженном съемном хранилище. Я пытаюсь связать два кода вместе, но я не уверен, как я могу это сделать. Вот коды, которые я использую:
DetectDrive.java
import java.io.*;
import java.util.*;
import javax.swing.filechooser.FileSystemView;
public class DetectDrive
{
public String USBDetect()
{
String driveLetter = "";
FileSystemView fsv = FileSystemView.getFileSystemView();
File[] f = File.listRoots();
for (int i = 0; i < f.length; i++)
{
String drive = f[i].getPath();
String displayName = fsv.getSystemDisplayName(f[i]);
String type = fsv.getSystemTypeDescription(f[i]);
boolean isDrive = fsv.isDrive(f[i]);
boolean isFloppy = fsv.isFloppyDrive(f[i]);
boolean canRead = f[i].canRead();
boolean canWrite = f[i].canWrite();
if (canRead && canWrite && !isFloppy && isDrive && (type.toLowerCase().contains("removable") || type.toLowerCase().contains("rimovibile")))
{
//log.info("Detected PEN Drive: " + drive + " - "+ displayName);
driveLetter = drive;
break;
}
}
/*if (driveLetter.equals(""))
{
System.out.println("Not found!");
}
else
{
System.out.println(driveLetter);
}
*/
//System.out.println(driveLetter);
return driveLetter;
}
}
FileSarch.java
import java.io.*;
public class FileSearch
{
public String find(File dir)
{
String pattern = ".raw";
File listFile[] = dir.listFiles();
if (listFile != null)
{
for (int i=0; i<listFile.length; i++)
{
if (listFile[i].isDirectory())
{
find(listFile[i]);
} else
{
if (listFile[i].getName().endsWith(pattern))
{
System.out.println(listFile[i].getPath());
}
}
}
}
return pattern;
}
}
Файл, который я хочу, чтобы программа искала, заканчивается расширением.raw, и я хочу, чтобы программа искала файл в обнаруженном съемном хранилище (например, F:). Как связать эти 2 кода вместе? Если возможно, я хотел бы, чтобы пример кодов связывал их. Я получил коды для FileSearch.java с http://rosettacode.org/wiki/Walk_a_directory/Recursively
2 ответа
Вот как бы я это сделал, однако я бы также сделал методы USBDetect
а также find
статические, они оба, кажется, не имеют никаких объектов, на которые они ссылаются в родительском классе. Также сделать USBDetect
вернуть File
вместо String
public static void main(String [] args) {
// look for the drive
String drive = (new DetectDrive()).USBDetect();
// if it found a drive (null or empty string says no)
if(drive != null && !drive.isEmpty()) {
// look for a file in that drive
FileSearch fileSearch = new FileSearch();
fileSearch.find(new File(drive+":"));
}
}
Во-первых, изменить USBDetect
заменив String driveLetter
с File removableDrive
, and return that. Then pass the value returned from USBDetect
в find
,