]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/IOUtils.java
Refactor addDeviceLink method
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / IOUtils.java
1 package org.asamk.signal.manager.util;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.nio.file.Files;
10 import java.nio.file.attribute.BasicFileAttributes;
11 import java.nio.file.attribute.FileTime;
12 import java.nio.file.attribute.PosixFilePermission;
13 import java.nio.file.attribute.PosixFilePermissions;
14 import java.util.EnumSet;
15 import java.util.Set;
16
17 import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
18 import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
19 import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
20
21 public class IOUtils {
22
23 public static File createTempFile() throws IOException {
24 final var tempFile = File.createTempFile("signal-cli_tmp_", ".tmp");
25 tempFile.deleteOnExit();
26 return tempFile;
27 }
28
29 public static byte[] readFully(InputStream in) throws IOException {
30 var baos = new ByteArrayOutputStream();
31 IOUtils.copyStream(in, baos);
32 return baos.toByteArray();
33 }
34
35 public static void createPrivateDirectories(File file) throws IOException {
36 if (file.exists()) {
37 return;
38 }
39
40 final var path = file.toPath();
41 try {
42 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE);
43 Files.createDirectories(path, PosixFilePermissions.asFileAttribute(perms));
44 } catch (UnsupportedOperationException e) {
45 Files.createDirectories(path);
46 }
47 }
48
49 public static void createPrivateFile(File path) throws IOException {
50 final var file = path.toPath();
51 try {
52 Set<PosixFilePermission> perms = EnumSet.of(OWNER_READ, OWNER_WRITE);
53 Files.createFile(file, PosixFilePermissions.asFileAttribute(perms));
54 } catch (UnsupportedOperationException e) {
55 Files.createFile(file);
56 }
57 }
58
59 public static void copyFileToStream(File inputFile, OutputStream output) throws IOException {
60 try (InputStream inputStream = new FileInputStream(inputFile)) {
61 copyStream(inputStream, output);
62 }
63 }
64
65 public static void copyStream(InputStream input, OutputStream output) throws IOException {
66 copyStream(input, output, 4096);
67 }
68
69 public static void copyStream(InputStream input, OutputStream output, int bufferSize) throws IOException {
70 var buffer = new byte[bufferSize];
71 int read;
72
73 while ((read = input.read(buffer)) != -1) {
74 output.write(buffer, 0, read);
75 }
76 }
77
78 public static long getFileCreateTime(final File file) {
79 try {
80 BasicFileAttributes attr = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
81 FileTime fileTime = attr.creationTime();
82 return fileTime.toMillis();
83 } catch (IOException ex) {
84 return -1;
85 }
86 }
87 }