Programowanie

Różne problemy na które trafiłem

Java i DLL Delphi

No i kolejny problem ... jest potrzebna biblioteka do zipowania plików w javie.
Niby nie ma problemu bo przecież jest wszystko w JDK ale ... co z zipowaniem z hasłem. Niestety taka funkcjonalność nie została zaimplementowana.
Hmmm ... mam akurat pod ręką biblioteki z takimi możliwościami do Delphi, zatem do dzieła :) .
Przeszukujemy internet bo oczywiście standardowy export i wywołanie nie działa :/

Piszę DLL w Delphi


  • Plik dpr
library ArchZip;
uses
JNI,
ArchZipUnit in 'ArchZipUnit.pas';

{$R *.res}
function Java_eu_salik_utils_ArchZip_ZipFileWithPass(PEnv: PJNIEnv; Obj: JObject; FilePath : JString; Password : JString ) : JBoolean; stdcall;
var FPath, Pass : String;
Env : TJNIEnv;
begin
Env := TJNIEnv.Create(PEnv);
FPath := Env.JStringToString( FilePath );
Pass := Env.JStringToString( Password );
Env.Free;
Result := ArchZipUnit.ZipFileWithPass( FPath, Pass );
end;

exports
Java_eu_salik_utils_ArchZip_ZipFileWithPass;
end.



  • Plik pas
unit ArchZipUnit;

interface
uses
SysUtils, Classes,ClassUtils,JNI, VclZip;

// pakowanie jednego pliku z zadanym hasłem - plik powstaje w tej samej lokalicacji
function ZipFileWithPass( FileNamePath , PasswordStr : String ) : boolean; forward;

implementation

function ZipFileWithPass( FileNamePath , PasswordStr : String ) : boolean;
var Zip : TVclZip;
fileext : string;
filenew : string;

begin

result := true;
try
Zip := TVclZip.Create(nil);
with Zip do
begin
Recurse := false;
StorePaths := false;
RelativePaths := false;
PackLevel := 0;

filenew := FileNamePath;
fileext := ExtractFileExt(filenew);
filenew := ReplaceStr( filenew, fileext, '.zip' );

ZipName := filenew;
Password := PasswordStr;
FilesList.Add( FileNamePath );
Zip;
Free;
end;
except
result := False;
end;
end;

  • A teraz JAVA

package eu.salik.utils;

public class ArchZip {

native public boolean ZipFileWithPass(String filename, String pass);

static {
System.loadLibrary("eArchZip");
}
}
  • Przykładowe wywołanie
public static void main(String[] args) {

ArchZip zzz = new ArchZip();
boolean ttt = zzz.ZipFileWithPass("c:\\temp\\1.txt", "111");
System.out.println( String.valueOf(ttt) );
}

I wszystko działa - mam nadzieję że wam również się uda :)

Backup MYSQL

Wymaga wywołania tylko jednej komendy z linii poleceń :D . Oczywiście mowa o MySQL 'postawionym' na własnej maszynie. Nie wymaga żadnych wizualnych narzędzi administracyjnych.

  • Przechodzimy do katalogu :
...../MySQL.../bin
  • Wywołujemy polecenie
mysqldump test > test.sql

>>> czyli baza danych TEST do pliku 'test.sql' <<<

Tak zrzucony plik wystarczy za pomocą narzędzia (np phpAdmin) pobrać jako backup bazy danych na serwerze gdzie mamy XOOPS'a ;)



Java Daty i Stringi 

/**
* Formatowanie daty do stringa wg ustalonego formatu po przekazaniu
* wartości daty jako string
*
* @param pYear
* @param pMonth
* @param pDay
* @return
*/
public static String FormatDate(String pYear, String pMonth, String pDay, String pFormat) {

Date tmpDate = FormatDate(Integer.valueOf(pYear).intValue(), Integer.valueOf(pMonth).intValue(), Integer.valueOf(pDay).intValue());

return FormatDate(tmpDate, pFormat);
}

/**
* Formatowanie liczb do stringa wg daty
*
* @param pYear
* @param pMonth
* @param pDay
* @return
*/
public static Date FormatDate(int pYear, int pMonth, int pDay) {

String tmpStr = String.valueOf(pYear) + "." + String.valueOf(pMonth) + "." + String.valueOf(pDay);

return FormatDate(tmpStr, "yyyy.MM.dd");
}

/**
* Formatowanie daty do stringa
*
* @param pDate
* @return
*/
public static String FormatDate(Date pDate, String pFormat) {

SimpleDateFormat dataFormat = new SimpleDateFormat();

dataFormat.applyPattern(pFormat);

String tmpStr = dataFormat.format(pDate);

dataFormat = null;

return tmpStr;
}

/**
* Formatowanie stringa do daty
*
* @param pDate
* @param pPattern
* @return
*/
public static Date FormatDate(String pDate, String pPattern) {

SimpleDateFormat dataFormat = new SimpleDateFormat();

if (!pPattern.equals(""))
dataFormat.applyPattern(pPattern);

Date tmpDate = new Date();

try {
tmpDate = dataFormat.parse(pDate);
} catch (ParseException e) {
}
dataFormat = null;

return tmpDate;
}

Brak komentarzy:

Prześlij komentarz