package mwt.wow.mpq; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class MpqFile { final MpqArchive mpqArchive; final String filePath; final HashTableEntry hashTableEntry; final BlockTableEntry blockTableEntry; protected MpqFile(MpqArchive mpqArchive, String filePath, HashTableEntry hashTableEntry, BlockTableEntry blockTableEntry) { this.mpqArchive = mpqArchive; this.filePath = filePath; this.hashTableEntry = hashTableEntry; this.blockTableEntry = blockTableEntry; } public String getFilePath() { return filePath; } public long getFileSize() { return blockTableEntry.getFileSize() & 0xffffffffL; } public InputStream getInputStream() throws IOException { return new MpqInputStream(this); } public void extractTo(File file) throws IOException { InputStream inputStream = getInputStream(); try { OutputStream outputStream = new FileOutputStream(file); try { byte[] buffer = new byte[mpqArchive.getSectorSize()]; while (true) { int len = inputStream.read(buffer); if (len == -1) { break; } outputStream.write(buffer, 0, len); } } finally { outputStream.close(); } } finally { inputStream.close(); } } @Override public String toString() { StringBuilder s = new StringBuilder(); s.append("File path: ").append(filePath).append('\n'); s.append(hashTableEntry); s.append(blockTableEntry); return s.toString(); } }