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