Чтобы полностью ответить на ваш вопрос:
File file = new File("your/file/path/file.ending");
try (FileInputStream fis = new FileInputStream(file)) {
// your code here
} catch (FileNotFoundException e){
e.printStackTrace();
}
И чтобы подвести итог, я создал рабочий пример, использующий немного другой способ реализации шифрования цезаря и использующий Files.lines (... ) для чтения содержимого файлов и Files.write (...) для записи зашифрованного содержимого в новый файл:
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Scanner;
import java.util.stream.Stream;
public class CaesarCipher {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.print("What is the input file name? ");
Path filePath = Paths.get(scanner.nextLine());
System.out.print("What is the output file name? ");
Path encodedFilePath = Paths.get(scanner.nextLine());
System.out.print("Caesar cipher offset? ");
final int offset = Integer.parseInt(scanner.nextLine());
// Retrieve a a stream of the input file, where each line is mapped using the encrypt function
Stream mappedFileStream = Files.lines(filePath).map(msg -> CaesarCipher.encrypt(msg, offset));
// Write encrypted content to a new file using our mapped stream as an iterable
Files.write(
encodedFilePath,
(Iterable) mappedFileStream::iterator,
StandardCharsets.UTF_8,
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
// Decrypt the encoded file content and print it
Files.lines(encodedFilePath)
.map((fileLine) -> CaesarCipher.decrypt(fileLine, offset))
.forEach(System.out::println);
}
public static String encrypt(String msg, int offset) {
offset = offset % 26 + 26;
StringBuilder encoded = new StringBuilder(msg.length());
for (char i : msg.toCharArray()) {
if (Character.isLetter(i)) {
char base = Character.isUpperCase(i) ? 'A' : 'a';
encoded.append((char) (base + (i - base + offset) % 26));
} else {
encoded.append(i);
}
}
return encoded.toString();
}
public static String decrypt(String enc, int offset) {
return encrypt(enc, 26 - offset);
}
}
Сначала нужно составить сообщение. Самый минимум состоит из этих двух заголовков:
MIME-Version: 1.0
Content-Type: text/html
... и соответствующего тела сообщения:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Получив его, вы можете передать соответствующую информацию команде mail :
body = '...'
echo $body | mail \
-a "From: me@example.com" \
-a "MIME-Version: 1.0" \
-a "Content-Type: text/html" \
-s "This is the subject" \
you@example.com
Это упрощенный пример, так как вам также нужно позаботиться о кодировках, кодировках, максимальной длине строки ... Но в основном это идея.
Как вариант, вы можете написать свой сценарий на Perl или PHP, а не на простой оболочке.
Сценарий оболочки - это, по сути, текстовый файл с окончанием строки Unix, который начинается со строки с именем shebang , которая сообщает оболочке, в какой интерпретатор он должен передать файл, следуйте некоторым командам в язык, который интерпретатор понимает и имеет разрешение на выполнение (в Unix это атрибут файла). Например, допустим, вы сохраняете следующее как hello-world
:
#!/bin/sh
echo Hello, world!
Затем вы назначаете разрешение на выполнение:
chmod +x hello-world
И вы, наконец, можете запустить его:
./hello-world
Как бы то ни было, это не имеет отношения к оригинальный вопрос. Вам следует ознакомиться с базовыми сценариями оболочки, прежде чем выполнять с ними расширенные задачи. Вот пара ссылок о bash , популярной оболочке:
http://www.gnu.org/software/bash/manual/html_node/index.html
Можно использовать опцию-o в sendEmail для отправки электронного письма HTML.
-o message-content-type=html для определения типа контента электронной почты.
-o файл сообщений для добавления файла HTML к почтовому содержанию.
я попробовал эту опцию в сценарии оболочки, и она работает.
Вот полная команда:
/usr/local/bin/sendEmail -f sender@test.com -t "reciever@test.com" -s \
smtp.test.com -u "Title" -xu sender@test.com -xp password \
-o message-charset=UTF-8 \
-o message-content-type=html \
-o message-file=test.html
Теги включают 'sendmail', поэтому вот решение, использующее это:
(
echo "From: me@xyz.com "
echo "To: them@xyz.com "
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/alternative; "
echo ' boundary="some.unique.value.ABC123/server.xyz.com"'
echo "Subject: Test HTML e-mail."
echo ""
echo "This is a MIME-encapsulated message"
echo ""
echo "--some.unique.value.ABC123/server.xyz.com"
echo "Content-Type: text/html"
echo ""
echo "<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>"
echo "------some.unique.value.ABC123/server.xyz.com--"
) | sendmail -t
Обертка для sendmail может упростить эту работу, например mutt :
mutt -e 'set content_type="text/html"' me@mydomain.com -s "subject" < message.html
Другой вариант - сценарий sendEmail http://caspian.dotconf.net/menu/Software/SendEmail/, он также позволяет вам установить тип сообщения как html и включить файл в качестве тела сообщения. Подробности смотрите по ссылке.
Другой вариант - использовать msmtp.
Что вам нужно, так это настроить ваш .msmtprc с чем-то вроде этого (в примере используется gmail):
account default
host smtp.gmail.com
port 587
from example@gmail.com
tls on
tls_starttls on
tls_trust_file ~/.certs/equifax.pem
auth on
user example@gmail.com
password <password>
logfile ~/.msmtp.log
Затем просто вызовите:
(echo "Subject: <subject>"; echo; echo "<message>") | msmtp <email@domain.tld>
в вашем скрипте.
Обновление: для HTML-почты вы должны поместить заголовки тоже, так что вы можете захотеть создать файл, подобный этому:
From: sender@domain.tld
To: email@domain.tld
Subject: Important message
Mime-Version: 1.0
Content-Type: text/html
<h1>Mail body will be here</h1>
The mail body <b>should</b> start after one blank line from the header.
И отправить его по почте, как
cat email-template | msmtp email@domain.tld
То же самое можно сделать и через командную строку, но может быть проще использовать файл.