FileUtils.smali
.class public final Lcom/tencent/tinker/android/dex/util/FileUtils;
.super Ljava/lang/Object;
# direct methods
.method private constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static hasArchiveSuffix(Ljava/lang/String;)Z
.registers 2
const-string/jumbo v0, ".zip"
invoke-virtual {p0, v0}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_1b
const-string/jumbo v0, ".jar"
invoke-virtual {p0, v0}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_1b
const-string/jumbo v0, ".apk"
invoke-virtual {p0, v0}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_1d
:cond_1b
const/4 v0, 0x1
:goto_1c
return v0
:cond_1d
const/4 v0, 0x0
goto :goto_1c
.end method
.method public static readFile(Ljava/io/File;)[B
.registers 7
invoke-virtual {p0}, Ljava/io/File;->exists()Z
move-result v0
if-nez v0, :cond_20
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ": file not found"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:cond_20
invoke-virtual {p0}, Ljava/io/File;->isFile()Z
move-result v0
if-nez v0, :cond_40
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ": not a file"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:cond_40
invoke-virtual {p0}, Ljava/io/File;->canRead()Z
move-result v0
if-nez v0, :cond_60
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ": file not readable"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:cond_60
invoke-virtual {p0}, Ljava/io/File;->length()J
move-result-wide v0
long-to-int v2, v0
int-to-long v4, v2
cmp-long v0, v4, v0
if-eqz v0, :cond_84
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ": file too long"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:cond_84
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0, v2}, Ljava/io/ByteArrayOutputStream;-><init>(I)V
const/4 v2, 0x0
:try_start_8a
new-instance v1, Ljava/io/BufferedInputStream;
new-instance v3, Ljava/io/FileInputStream;
invoke-direct {v3, p0}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
invoke-direct {v1, v3}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V
:try_end_94
.catchall {:try_start_8a .. :try_end_94} :catchall_b8
const/16 v2, 0x2000
:try_start_96
new-array v2, v2, [B
:goto_98
invoke-virtual {v1, v2}, Ljava/io/InputStream;->read([B)I
move-result v3
if-lez v3, :cond_aa
const/4 v4, 0x0
invoke-virtual {v0, v2, v4, v3}, Ljava/io/ByteArrayOutputStream;->write([BII)V
:try_end_a2
.catchall {:try_start_96 .. :try_end_a2} :catchall_a3
goto :goto_98
:catchall_a3
move-exception v0
:goto_a4
if-eqz v1, :cond_a9
:try_start_a6
invoke-virtual {v1}, Ljava/io/InputStream;->close()V
:try_end_a9
.catch Ljava/lang/Exception; {:try_start_a6 .. :try_end_a9} :catch_b6
:cond_a9
:goto_a9
throw v0
:cond_aa
if-eqz v1, :cond_af
:try_start_ac
invoke-virtual {v1}, Ljava/io/InputStream;->close()V
:try_end_af
.catch Ljava/lang/Exception; {:try_start_ac .. :try_end_af} :catch_b4
:cond_af
:goto_af
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
return-object v0
:catch_b4
move-exception v1
goto :goto_af
:catch_b6
move-exception v1
goto :goto_a9
:catchall_b8
move-exception v0
move-object v1, v2
goto :goto_a4
.end method
.method public static readFile(Ljava/lang/String;)[B
.registers 2
new-instance v0, Ljava/io/File;
invoke-direct {v0, p0}, Ljava/io/File;-><init>(Ljava/lang/String;)V
invoke-static {v0}, Lcom/tencent/tinker/android/dex/util/FileUtils;->readFile(Ljava/io/File;)[B
move-result-object v0
return-object v0
.end method
.method public static readStream(Ljava/io/InputStream;)[B
.registers 2
const v0, 0x8000
invoke-static {p0, v0}, Lcom/tencent/tinker/android/dex/util/FileUtils;->readStream(Ljava/io/InputStream;I)[B
move-result-object v0
return-object v0
.end method
.method public static readStream(Ljava/io/InputStream;I)[B
.registers 6
if-gtz p1, :cond_5
const p1, 0x8000
:cond_5
new-instance v0, Ljava/io/ByteArrayOutputStream;
invoke-direct {v0, p1}, Ljava/io/ByteArrayOutputStream;-><init>(I)V
const/16 v1, 0x2000
new-array v1, v1, [B
:goto_e
invoke-virtual {p0, v1}, Ljava/io/InputStream;->read([B)I
move-result v2
if-lez v2, :cond_19
const/4 v3, 0x0
invoke-virtual {v0, v1, v3, v2}, Ljava/io/ByteArrayOutputStream;->write([BII)V
goto :goto_e
:cond_19
invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v0
return-object v0
.end method