/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.test.fs.ntfs; import java.io.File; import java.io.FileNotFoundException; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import javax.naming.NameNotFoundException; import org.jnode.driver.block.FileDevice; import org.jnode.fs.FSDirectory; import org.jnode.fs.FSEntry; import org.jnode.fs.FileSystemException; import org.jnode.fs.ntfs.NTFSFileSystem; import org.jnode.fs.ntfs.NTFSFileSystemType; import org.jnode.fs.service.FileSystemService; import org.jnode.naming.InitialNaming; /** * Ext2 fs test, reads a disk image * to be run outside of JNode * * @author Andras Nagy */ public class NTFSTest { org.jnode.fs.ntfs.NTFSFileSystem NTFSfs = null; File partImg = new File("e:/image2k.img"); public NTFSTest() { //read the disk image of an ext2fs partition //FileDevice implements BlockDeviceAPI FileDevice fd = null; try { fd = new FileDevice(partImg, "r"); } catch (IOException e) { System.out.println("error when reading disk image"); System.exit(-1); } try { final FileSystemService fSS = InitialNaming.lookup(FileSystemService.NAME); NTFSFileSystemType type = fSS.getFileSystemType(NTFSFileSystemType.ID); NTFSfs = new NTFSFileSystem(fd, false, type); } catch (FileSystemException e) { System.out.println("error when constructing Ext2FileSystem"); e.printStackTrace(); System.exit(-1); } catch (NameNotFoundException e) { System.out.println("error while accessing file system service"); System.exit(-1); } try { //FSDirectory root = NTFSfs.getRootEntry().getDirectory(); //System.out.println(root.getEntry("text.txt").getName()); //System.out.println("getRootEntry().isDirectory(): "+NTFSfs.getRootEntry().isDirectory()); //System.out.println("getRootEntry().isFile(): "+NTFSfs.getRootEntry().isFile()); list(null, null); } catch (IOException e) { System.out.println("error when parsing root directory"); e.printStackTrace(); System.exit(-1); } } public String[] list(File directory, FilenameFilter filter) throws IOException { final FSEntry entry = NTFSfs.getRootEntry(); if (entry == null) { throw new FileNotFoundException(directory.getAbsolutePath()); } if (!entry.isDirectory()) { throw new IOException("Cannot list on non-directories " + directory); } final ArrayList<String> list = new ArrayList<String>(); for (Iterator<? extends FSEntry> i = entry.getDirectory().iterator(); i.hasNext();) { final FSEntry child = i.next(); final String name = child.getName(); if ((filter == null) || (filter.accept(directory, name))) { list.add(name); } if (child.isDirectory()) child.getDirectory(); else child.getFile(); if (child.isFile()) System.out.println( "Name = \"" + name + "\" , Size = " + child.getFile().getLength() + ", IsDirectory = " + child.isDirectory()); else System.out.println( "Name = \"" + name + "\" , IsDirectory = " + child.isDirectory()); } return list.toArray(new String[list.size()]); } public void iterateRoot(FSDirectory root) { try { Iterator<? extends FSEntry> rootIterator; rootIterator = root.iterator(); while (rootIterator.hasNext()) { FSEntry entry = rootIterator.next(); System.out.println(entry.getName()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void printBootSectorData() { /*try { NTFSVolume volume = new NTFSVolume(this.stream); System.out.println("OEM ID = " + volume.getBootRecord().SystemID); System.out.println("Bytes Per Sector = " + volume.getBootRecord().BytesPerSector); System.out.println("Sectors Per Cluster = " + (int)volume.getBootRecord().SectorPerCluster); System.out.println("MediaDescriptor = 0x" + Integer.toHexString(volume.getBootRecord(). MediaDescriptor).toUpperCase()); System.out.println("Sector per track = " + volume.getBootRecord().SectorsPerTrack); System.out.println("Logical Cluster Number for the file $MFT = " + volume.getBootRecord().MFTPointer); System.out.println("Clusters per MFT Record = " + volume.getBootRecord().ClustersPerMFTRecord); System.out.println("Total Sectors = " + volume.getBootRecord().TotalSectors); System.out.println("$MFT byte start= " + volume.getBootRecord().MFTPointer * volume.getClusterSize() + "( 0x"+ Integer.toHexString(volume.getBootRecord().MFTPointer * volume.getClusterSize()) + ")"); System.out.println("Cluster size = " + volume.getClusterSize()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ } public static void main(String[] args) { NTFSTest test = new NTFSTest(); test.printBootSectorData(); } }